日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于补码的详解

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于补码的详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

怎么在計算機中表示負數?
正數在計算機中的表示,我們都比較清楚,轉為二進制,也知道如何表示。那負數在計算機上如何表示呢?
比如,8在計算機中的二進制表示是00001000。
那么比較很容易想到,可以將一個二進制位(bit)專門規定為符號位,它等于0時就表示正數,等于1時就表示負數。比如,在8位機中,規定每個字節的最高位為符號位。那么,+8就是00001000,而-8則是10001000。
但是,隨便找一本《計算機原理》,都會告訴你,實際上,計算機內部采用2的補碼(Two’s Complement)表示負數。
什么是2的補碼呢?
它是一種數值的轉換方法,要分兩步完成:
1、每一個二進制位都要取反,0變成1,1變成0.比如,00001000變成11110111。
2、將上一步得到的值加1,11110111就變成了11111000。
所以,00001000的2的補碼就是11111000,也就是說8的補碼在計算機中用11111000表示。

那么為什么非要用這種取反加一的方式表示負數呢,直接用最高符號位表示不更方便嗎?
現在就來解釋下這樣做的原因。
為什么用2的補碼表示負數?
首先,要明確一點,在計算機內部用什么表示負數,其實是無所謂的,只要你能夠保持一一對應的關系,就可以用任意的方式來表示負數。所以,既然可以任意選擇,那我們就要選擇一種最方便的方式。
2的補碼呢,就是最方便的方式,它的便利體現在,所有的加法運算都可以使用同一種電路來完成。
還是以-8來作為例子。
假定有兩種表示方法,一種就是最高符號位方法,即10001000。一種是2的補碼表示法,即11111000。請問哪一種方法在加法運算中更方便呢?
隨便寫一個計算式,16+(-8)=?
16的二進制表示是00010000,所以用最高符號位方法,加法就要寫成:
 00010000
+10001000
---------
 10011000
可以看到按照正常的加法規則,得到了10011000的結果,轉成十進制就是-24。顯然,這就是錯誤的答案。也就是說,在這種情況下,正常的加法規則不適用正數與負數的加法,因此必須要制定兩套運算規則,一套用于正數加正數,一種用于正數加負數。從電路上來說,就是必須要為加法運算做兩種電路。這…
現在,再來看2的補碼表示法:
 00010000
+11111000
---------
100001000
可以看到按照正常的加法規則,得到100001000的結果。注意一下,這是一個9位的二進制。因為我們已經假設這是一個8位機,因此最高的第9位是一個溢出位,會被自動舍去。所以結果就變成了00001000,轉成十進制就是8,也就是正確答案啦。這就說明2的補碼表示法可以將加法運算規則,擴展到整個數據集,從而一套電路就可以實現全部正數的加法,用一套規則舉行。

2的補碼的本質以及正確性

我們要看先一下模的概念“模”是指一個計量系統的計數范圍。如時鐘等。計算機也可以看成一個計量機器,它也有一個計量范圍,即都存在一個“模”。例如:時鐘的計量范圍是0~11,模=12。表示n位的計算機計量范圍是0~2n?10~2^{n-1}02n?1,模就是2n2^n2n。“模”實質上是計量器產生“溢出”的量,它的值在計量器上表示不出來,計量器上只能表示出模的余數。任何有模的計量器,均可化減法為加法運算。
  例如: 假設當前時針指向10點,而準確時間是6點,調整時間可有以下兩種撥法:你可以往回撥4個小時,也可以向前撥8個小時(12-10+6,在鐘表系統里模是12)在以12模的系統中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。
  對“模”而言,8和4互為補數。實際上以12模的系統中,11和1,10和2,9和3,7和5,6和6都有這個特性。共同的特點是兩者相加等于模。
  對于計算機,其概念和方法完全一樣。n位計算機,設n=8, 所能表示的最大數是11111111,若再加1稱為100000000(9位),但因只有8位,最高位1自然丟失。又回了00000000,所以8位二進制系統的模為2^8。 在這樣的系統中減法問題也可以化成加法問題,只需把減數用相應的補數表示就可以了。
再次重申一下這句話:
在以12模的系統中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。

所以對應模為100000000的8位機來說,-b 就等于加上10000 0000-b。
而(10000 0000-b)是什么?恰好就是b的補碼
補碼怎么求,“取反加一” 這口訣怎么來的?
承認了8 - 5 = 8 + (-5的補碼)這個事實后,我們來看-5的補碼怎么求,“取反加一”怎么來的
其實看完了上面的模的問題,該問題的答案基本已經出來了
-5的補碼是 10000 0000 - 5 = 1111 1111 + 1 -5 = (1111 1111 - 5) + 1
1111 1111 - 0000 0101 +1 =1111 1010 +1 =1111 1011
然后,用8+1111 1011,即0000 1000 + 1111 1011 =10000 0011,8位機,即0000 0011,轉為十進制就是3。也就是正確答案。
所以,2的補碼的本質就是模的計算,減去一個數,都可以用加上補數(模減去它)來算的。

總結

以上是生活随笔為你收集整理的关于补码的详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。