怎麼判斷乙個有符號的8位二進位制數表示的是什麼?

2021-09-06 04:00:19 字數 847 閱讀 1891

在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為二進位制我也能理解,但是我很好...