首先,小編的理解(以前學(xué)c語言就是這樣理解的,老譚(譚浩強)那本書上講整數(shù)的取值范圍那段就有):
8位二進制的原值表達范圍為:-127至127
共有256個組合序列 0000 0000 至1111 1111 。
+128的原值在8位中是表達不出來的。
(1)從數(shù)學(xué)層面上去理解:
從數(shù)學(xué)上計算 256-128=128,
因為:256-128=256+(-128)的補碼
而 256-128=128
所以 256+(-128)的補碼=128
所以 (-128)的補碼=256-128
=128
而從數(shù)學(xué)上, 128=1000 0000
故規(guī)定-128的補碼為 1000 0000
所以說,128在8位內(nèi)存中是表達不出來的。
不存在+128 8位原碼及反碼的形式,按常規(guī)算法是不對的。
注意:只是規(guī)定而已,下面還有原因。
(2)8位二進制 的補碼組合序列有
0000 0000 - 0111 1111 為:0 - +127
1000 0000 表示什么呢?
(表示-0,不是的,-0的原碼是1000 0000 補碼是0000 0000
+0 的補碼也是 0000 0000)
1000 0001- 1111 1111 -1 - -127
全部狀態(tài)為256個
再看看這個規(guī)律表
......補碼不斷-1........
0000 0000 0000 0000 0
1000 0001 1111 1111 -1
1000 0010 1111 1110 -2
1000 0011 1111 1101 -3
......補碼不斷-1........
1111 1111 1000 0001 -127
無法表達 1000 0000 -128
于是就有了規(guī)定 1000 0000 定為 -128的補碼
這種定法和上面數(shù)學(xué)層面的表述是一致的。
這樣規(guī)定后,負數(shù)的補碼在機器中就好算了。
在約定的范圍內(nèi)(-128-+127,對16位32位64位等擴大范圍)
先將該負數(shù)取絕對值,再用二進制表示出這個絕對值 (不管符號位)
對該二進制數(shù)進行取反加一操作就得到負數(shù)的補碼了
-128 絕對值是 128
128的二進制表示為:
1000 0000
取反
0111 1111
加1
1000 0000
這就是-128的補碼
這種辦法算出的結(jié)果符合“規(guī)定值”,規(guī)定而已。
另外一種解釋:
1.
-127補+(-1補)=-128補
-127原=11111111,-127補=10000000
-1補=11111111
10000000+11111111=10000000,這就是-128補
2.
127+1=128,正數(shù)溢出,不能表示,用-128的補碼表示
127補=01111111, 1補 = 00000001
127補 + 1補=
01111111+00000001=10000000,
這就是-128補碼
本文發(fā)布于:2023-02-28 19:58:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/167764652172923.html
版權(quán)聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請與我們聯(lián)系,我們將在24小時內(nèi)刪除。
本文word下載地址:二進制補碼(二進制補碼轉(zhuǎn)換十進制).doc
本文 PDF 下載地址:二進制補碼(二進制補碼轉(zhuǎn)換十進制).pdf
| 留言與評論(共有 0 條評論) |