隨手筆記-二進制的正負計算


以下計算基於字節單位,由於負數是以補碼存儲,所以一下負數表示形式皆為補碼

1.負數的二進制求法

  負數的二進制一般通過正數反推導出,即(正數二進制 -> 取反 -> 補碼(加1)),舉個例子:

  99的二進制為:‭0110 0011‬

  那么-99的二進制計算方法為

        0110 0011

   1.取反: 1001 1100  即0轉為1,1轉為0

   2.補碼: 1001 1101  即低位加1

   那么,1001 1101即為十進制的 -99

  有同學要問了,如果低位為1該如何加1?這就是二進制的基礎算法了,即逢二進一,舉個例子:

  98的二進制為:0110 0010

      取反:1001 1101

      補碼:1001 1110  這里1+1等於2了,所以不是相加,而是進一位

  那如果是1001 1111,結果就是1010 0000,這里有個規律,即從右向左找到第一個0,然后這個0后的數字全部變為0,而此0加1變為1

 

2.由負數二進制推正數

  其實與正數退負一樣,主要就是取反和補碼,不過這里有一點概念上的點需要注意,即很多人通過負數進制反推正數時,習慣的按正數推負數的步驟反着來,

  即:

  -99:      1001 1101

  1.低位-1:   1001 1100

  2.取反:    0110 0011

  這么做的結果固然是正確的,但計算機是不做減法的,計算機的減法其實是加法,即1+(-1),所以我們理解起來正常的邏輯在計算機計算中並不適用

  那么按正常的算法,步驟應該為:

  -99:      1001 1101

  1.取反:    0110 0010

  2.補碼:    0110 0011

 

  同樣的先取反后補碼。

  這么說可能不太好理解,有網友舉出這樣一個公式,這樣就容易理解了:

  正數 + 負數 = 0

  正碼 + 反碼 + 1 = 0

  所以,正碼取反+1即為反碼,反碼取反+1即為正碼

3.那么,如果正數與負數相加,該如何計算呢

  上面我們可以看到,正數99的二進制為0110 0011‬,正數的原碼、反碼、補碼都是一樣的,所以99的補碼也是0110 0011‬,

  然后-98的補碼為1001 1110,那么,兩個進制相加結果:

      0110 0011

  +    1001 1110

  =   1 0000 0001

 

  高位溢出,則舍棄高位,所以結果為:0000 0001,即為10進制的1

  至於二進制的加法運算方法,如下:

  1.將數字對齊

  2.從右向左,上下上下兩個數字相加

  3.如果不是1+1,即1+0、0+1、0+0,那就直接相加,如果兩個數都是1,則1+1=10,結果列寫上0,1向上進,這里規則跟普通十進制計算一樣,比如13+8,3+8=11,結果列寫上1,然后十位數的1向上進,然后1+1 = 2,結果即為21。

  4.如果超出位數,則從坐向右舍棄溢出的數字

  如果覺得文字表述不清楚,百度經驗上有直觀的的圖片解釋:https://jingyan.baidu.com/article/86112f135745432736978776.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM