二進位制中補碼的最小負數為什麼是10000000?怎麼來

時間 2021-05-23 04:13:13

1樓:和絃的微甜

書上給出的這個二進位制數是一個補碼,按照補碼的定義中所講,一個負整數中補碼計算是2^(n+1)+x(x代表的是二進位制的真值)

你說的這個前提是給整形變數分配的是1個位元組,就是共8位,最前面一位是符號位,1 0000000,這個時候按照定義來算,2^(7+1)+x=1 0000000,2^(7+1)即10 0000000,1 0000000減10 0000000剛好為真值(真值是有符號的)-1 0000000,也就是-128。我覺得這個臨界值只能按照定義來看,如果按照這個補碼取反再加一,算完如果把最高位捨去就成了00000000,

還有就是補碼的出現本身就是為了使得計算機用加法代替減法,10000001(補碼)代表-127,01111111代表+127,如果+127再加1,符號位就成1了,這肯定不行啊,所以最大就是+127,那在10000001和01111111之間的1 0000000只能是負數裡的,把它規定為負數剛好又能使計算機解決一個麻煩(計算中減法不就是加負數麼,把負數用補碼錶示實際就是讓計算機做了加法,這個說法就是說把計算機和時鐘的那個說法中涉及的,可以查閱資料),所以1 0000000也必須用來表示-128。

2樓:沙裡波特

按照八位來解釋。

十進位制數字的補碼,可見下列的二進位制:

十進位制數 0,以二進位制補碼 0000 0000存放。

十進位制數 +1,就加上 1,就是二進位制 0000 0001

十進位制數 +2,就再加 1,得到二進位制 0000 0010

十進位制數 +127,加 1加 1...,就加到了0111 1111

----------

負數怎麼辦? 你就從 0,依次遞減吧。

十進位制數 0,以二進位制補碼 0000 0000 存放

十進位制數 -1,就減去 1,得1111 1111 = 255(十進位制)

十進位制數 -2,就再減 1,得1111 1110 = 254

十進位制數 -3,就再減 1,得1111 1101 = 253。

。。。十進位制數 -128,減 1減 1...,得1000 0000 = 128

這就是最小值,這就不能再減了。

你要是再減,就是 0111 1111,這就是+127 了。

因此,最小負數的補碼,就是二進位制10000000。

其實,求負數的補碼,就是這種演算法:【256+這個負數】。

完全不用繞到「原碼反碼符號位」那麼遠。

可以用十進位制計算。如果需要二進位制的結果,你自己再轉換一下,就完了。

用這個方法,不涉及原碼反碼符號位,少了不少麻煩事。

但是,計算機磚家,肯定是不會喜歡這種方法的。

因為,他們就沒有什麼可吹噓的了、也沒有什麼可難為學生的了。

3樓:匿名使用者

符號位 1 代表負數,其他各位組成的數越小,整個負數越小

4樓:在寄暢園跳傘的木荷

原碼有兩個0值(0000 0000與1000 0000)改為補碼後只有一個0值了,即0000 0000。

8位二進位制能表示的數的總個數沒有變,而補碼正數的表示方法較原碼沒有發生改變。所以原碼裡的另一個0值的數的位置給了負數,所以補碼的負數就比原碼的多了一個。

也就是說補碼的最小值比原碼的最小值還要小1,所以你當然不能用原碼的最小值轉換得到補碼最小值咯。

你可以將1000 0000(補)轉換為原碼驗證一下。

二進位制:關於10000000如何表示-128的問題

5樓:熙苒

對的,有符號數 最高位是符號位。於是,計算機裡 +0 和 -0 編碼是不一樣的。計算機裡負數用補碼錶示,為的是減法可以用加法器執行。

10000000 那個1是表示負數,但整個值是 -128,這是特殊的規定。

就這一個值特殊。不能用尋常的減1求反判斷。這是為了讓有符號數,多1個有用的資料點,讓可描述的數值範圍從 -127 - +127 擴大到 -128 - +127。

只不過 把 -0 和 +0 合為 +0。

當然,一定要追問 怎麼算出 -128 的。需要增加1個更高位來考慮。考慮完了,再去掉那位。

負數在現代計算機裡一般用補碼錶示:最高位是符號位,其餘位為數字的原碼取反+1

1000 0000還原為原碼:

最高位是1,表示負數,剩餘的各位取反 111 1111 再+1 得到 1000 0000, +128的原碼,整個數為-128

負數求負整數的補碼,將其對應正數二進位制表示所有位取反(包括符號位,0變1,1變0)後加1 。

同一個數字在不同的補碼錶示形式中是不同的。比如-15的補碼,在8位二進位制中是11110001,然而在16位二進位制補碼錶示中,就是1111111111110001。以下都使用8位2進位制來表示。

與十進位制

(1)二進位制轉十進位制

方法:「按權求和」

【例】:

規律:個位上的數字的次數是0,十位上的數字的次數是1,......,依次遞增,而十

分位的數字的次數是-1,百分位上數字的次數是-2,......,依次遞減。

注意:不是任何一個十進位制小數都能轉換成有限位的二進位制數。

(2)十進位制轉二進位制

· 十進位制整數轉二進位制數:「除以2取餘,逆序排列」(除二取餘法)

【例】:

89÷2 ……1

44÷2 ……0

22÷2 ……0

11÷2 ……1

5÷2 ……1

2÷2 ……0

1· 十進位制小數轉二進位制數:「乘以2取整,順序排列」(乘2取整法)

【例】: (0.625)10= (0.101)2

0.625x2=1.25 ……1

0.25 x2=0.50 ……0

0.50 x2=1.00 ……1

.十進位制負數轉二進位制:「先取正數的二進位制值,再取反,加1」

【例】:(-31)10 = (1)2

31的二進位制數為11111,取反00000,加1得1。

與八進位制

二進位制數轉換成八進位制數:從小數點開始,整數部分向左、小數部分向右,每3位為一組用一位八進位制數的數字表示,不足3位的要用「0」補足3位,就得到一個八進位制數。

八進位制數轉換成二進位制數:把每一個八進位制數轉換成3位的二進位制數,就得到一個二進位制數。

八進位制數字與十進位制數字對應關係如下:

000 -> 0 | 004-> 4 | 010=8

001 -> 1 |005 -> 5| 011=9

002 -> 2 |006 -> 6 | 012=10

003 -> 3 |007 -> 7 | 013=11

【例】:將八進位制的37.416轉換成二進位制數:

3 7 . 4 1 6

011 111 .100 001 110

即:(37.416)8 =(11111.10000111)2

【例】:將二進位制的10110.0011 轉換成八進位制:

0 1 0 1 1 0 . 0 0 1 1 0 0

2 6 . 1 4

即:(10110.0011)2 = (26.14)8

與十六進位制

二進位制數轉換成十六進位制數:二進位制數轉換成十六進位制數時,只要從小數點位置開始,向左或向右每四位二進位制劃分一組(不足四位數可補0),然後寫出每一組二進位制數所對應的十六進位制數碼即可。

十六進位制數轉換成二進位制數:把每一個十六進位制數轉換成4位的二進位制數,就得到一個二進位制數。

十六進位制數字與二進位制數字的對應關係如下:

0000 -> 0 0100 -> 4 1000 -> 8 1100 -> c

0001 -> 1 0101 -> 5 1001 -> 9 1101 -> d

0010 -> 2 0110 -> 6 1010 -> a 1110 -> e

0011 -> 3 0111 -> 7 1011 -> b 1111 -> f

【例】:將十六進位制數5df.9 轉換成二進位制:

5 d f . 9

0101 1101 1111 .1001

即:(5df.9)16 =(10111011111.1001)2

【例】:將二進位制數1100001.111 轉換成十六進位制:

0110 0001 . 1110

6 1 . e

即:(1100001.111)2 =(61.e)16

二進位制負數如何求補碼用labview

我來試試。測試資料通過,希望採納。如果需要源程式的話或者有不懂的地方可以私信我!關於二進位制負數的補碼 求負整數的補碼,將其原碼除符號位外的所有位取反 0變1,1變0,符號位為1不變 後加1。同一個數字在不同的補碼錶示形式中是不同的。比如 15的補碼,在8位二進位制中是11110001,然而在16位...

二進位制負數為什麼是正數的卻加,二進位制負數為什麼是正數的取反加1?

歷史的天空 可以使符號位能與有效值部分一起參加運算,從而簡化運算規則。為了使減法運算變成加法運算,並進一步簡化計算機中運算單元的電路設計,所有這些轉換都是在計算機的底層進行的,而我們使用的組合語言 c語言和其他高階語言都使用原始 得到補碼,使負數成為可加的正數。因此,負數的補碼 模組負數的絕對值。計...

32768的二進位制補碼是多少, 32768的原碼及補碼是多少?怎麼算的

32768的二進位制補碼為1000000000000000,同時也可以為11000000000000000,因為補碼1000000000000000和11000000000000000是相等的。1000000000000000 二是補碼,最高位1,表示是負數,轉換成對應原碼是用下面的方法 1,原碼轉...