二補數 (2's complement) :是一種用二進位表示有號數的方法,也是一種將數字的正負號變號的方式,常在計算機科學中使用。
一個數字的二補數就是將該數字作位元反向運算(即一補數),再將結果加 1,即為該數字的二補數。
在二補數系統中,一個負數就是用其對應正數的二補數來表示。
優點:二補數系統的最大優點是可以在加法或減法處理中,不需因為數字的正負而使用不同的計算方式。
????????? 只要一種加法電路就可以處理各種有號數加法,而且減法可以用一 個數加上另一個數的二補數來表示,因此只要有加法電路及二補數電路即可完成各種有號數加法及減法,在電路設計上相當方便。
特點:二補數系統的 0 只有一個表示方式,這點和一補數系統不同(在一補數系統中,0 有二種表示方式),因此在判斷數字是否為 0 時,只較比對一個不同的條件即可。
具體算法:(轉貼:原地址: http://entry.hit.edu.tw/~bd92046/new_page_1.htm )
二補數轉換方法差異
方法1:
10進制轉2進制:
<1>直接將10進制轉為2進制,正負號省略。
<2>如果數目少於X bits,在左邊補0直到X bits。
<3>如果是正號,不需要其他動作。
?? 如果是負號,使用1補數:將0變1,1變0;1補數加1,形成2補數。
例(1):將+6以16bit儲存,使用2補數。
????????? +6 => 110 => 0000000000000110
例(2):將-125以16bit儲存,使用2補數。
????????? -125 => 1111101 => 0000000001111101
?????????????? => 1111111110000010 => 1111111110000011
2進制轉10進制:
<1>如果最左邊的bit是0(正數)。
??? 1-1…將數字由二進制轉為十進制。
??? 1-2…在數字前加+號。
例:將0000000000000110轉為十進制(使用2補數)
?????? 0000000000000110 => 6 => +6
<2>如果最左邊的bit是1 (負數)。
?? 2-1…2補數減1,變為1補數。
?? 2-2…將所有的0變1;1變0。
?? 2-3…將數字由2進制轉為10進制。
?? 2-4…在數字前加-號。
例:將1111111110000100轉為十進制(使用2補數)
?????? 1111111110000011 => 1111111110000010
??????????????????????? => 0000000001111101 => 125 => -125
方法2:
10進制轉2進制:
<1>將數字改為2進制;正負號省略。
<2>如果數目少於X bits,在左邊補0直到X bits。
<3>如果是正號,不需要其他動作。
?? 如果是負號,維持最右邊的0直到第一個1(包含)不變,其餘的皆變換。
?? (0變1,1變0)
例(1):將+6以16bit儲存,使用2補數
???????? +6 => 110 => 0000000000000110
例(2):將-125以16bit儲存,使用2補數
???????? -125 => 1111100 => 0000000001111100 => 1111111110000100
2進制轉10進制:
<1>如果最左邊的bit是0 (正數)。
1-1…將數字由2進制轉為10進制。
1-2…在數字前加+號。
例:將0000000000000110轉為10進制(使用2補數)
?????? 0000000000000110 => 6 => +6
<2>如果最左邊的bit是1 (負數)。
2-1…維持最右邊的bits不變直到第一個1(包含),其餘的皆變換。
??? (0變1,1變0)。
2-2…將數字由2進制轉為10進制。
2-3…在數字前加-號。
例1111111110000011轉為10進制(使用2補數)
?? 1111111110000010 => 0000000001111101 => 125 => -125
二者之間的差異
10進制轉2進制:
方法1需要先轉換到1補數,再用1補數+1轉為2補數,使用上較為簡單,
??????? 但計算速度比較慢。
方法2就直接轉換成2補數,在使用上比較容易出錯,不過計算速度會比較快。
2進制轉10進制:
方法1須先使-1變為1補數,然後才能轉換成10進制,計算較為簡單,計算速度緩慢。
方法2可以直接轉換,比較容易出錯,但計算速度較快。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
