在leetcode上刷第七題時,提到32位的有符號二進位制數表示的整數範圍為:-2^31~2^31-1,那這是怎麼來的呢?
首先對於計算機記憶體儲存的二進位制數,具體表示什麼其實是交給人來決定的,如:
1000 0001
有符號數表示的是:-127
無符號數表示的是:129
對於有符號數,最高位用來表示該整數的符號,0表示正數,1表示負數。
如果是正數,直接將它的原碼翻譯成十進位制即可:
如:
0000 0010
表示的是正數:
解讀方式:
直接以2為權展開為十進位制數即可:
1*2^1=2
如果是負數,則它是用補碼表示的,如:
1000 0000
表示的是負數:
解讀方式:
第一步:直接將最高位以外的其他位按2為權展開:0
第二步:求出除去最高位以後的7位表示的模:2^7=128
第三步:將第二步的結果減去第一步的結果:128-0=128
第四步:給第三步的結果加上負號:-128
因此,對於8位的有符號二進位制數表示的範圍(-128~127),即(-2^7~2^7-1)可以這樣計算:
最小值: 1000 0000 表示-128
最大值: 0111 1111 表示127
同理,對於32位的有符號二進位制數表示的範圍,可以計算為:(-2^31~2^31-1)
在c++中,為了避免記憶這兩個數,用兩個巨集來替代了:
int_max=2^31-1
int_min=-2^31
24位二進位制解析為有符號整數
include int getdata char buf,int n buf 0 是高位位元組,buf 2 是低位位元組 int main char b 3 result getdata a,3 printf d n result result getdata b,3 printf d n resu...
判斷乙個二進位制數的正負
計算機中,用二進位制 或者簡寫成十六進製制 表示數,高位為0的數為正數,高位為1的數是負數。例如,int a 0xf48904e,int b 0xf48904e0,long c 0xf80000000l,long d 0xf800000000000000l.其中,a和c是正數,b和d是負數 通過編寫...
有符號二進位制數的乘法
最近在閱讀 深入理解計算機系統 講到補碼乘法,書上給了乙個例子是三位無符號和補碼的乘法表。其中兩個負數的例子 3位二進位制乘法結果一般需要6為二進位制表達 帶符號數 x 101 3 和y 011 3相乘 結果為110111 9 如果直接算出來十進位制是 9然後轉換為6為二進位制我也能理解,但是我很好...