二進位制的減法

2021-10-11 17:42:35 字數 2256 閱讀 9249

這裡需要說明的是,在計算機中做二進位制數運算時,一定要明確是在多少位的整型前提下進行的,這樣才能夠正確處理位數溢位的問題。

其實減法也可以看成加法 6+(-4)

無論加減法總結:補碼相加 結果再求補碼

1表示負

0表示正

在計算機中,負數是使用它的補碼來表示的。所謂補碼,就是反碼+1。所謂反碼,就是二進位制數逐位取反。所謂逐位取反,就是1變成0,0變成1。例如:

原來的二進位制數: 1011011101101反碼:0100100010010補碼: 0100100010011

在數學裡面,當我們判斷乙個正數和負數的時候,是通過這個數字前面的負號來判斷的,例如: 5和 -5。但是由於計算機裡面只有0和1,如何表示負號呢?因此可以使用乙個額外的1來表示。例如:

正數:0101負數: 1101

其中最左邊的0和1表示的是符號位,0為正數,1為負數。

如果到這裡,你以為你看懂了,那麼我問你乙個問題,下面幾個數有什麼區別:

0101

00101

000101

0000101

00000101

下面幾個數有什麼區別:

1101

10101

100101

1000101

10000101

實際上,他們表示的是不同位數條件下的同乙個數。因為在計算機中,你定義乙個數字的時候,是需要先提前指定這個數的型別的。例如int型、long型等等。(即便你用的python,不需要人工指定,但是在底層它也會自動指定)。所以,如果我直接說:數字5在計算機中是怎麼儲存的,是沒有意義的。應該說,數字5在8位整型下面是怎麼儲存的、在32位整型下面是怎麼儲存的:

00000101 # 8位整型

00000000000000000000000000000101 # 32位整型

所以,對於-5,在8位整型和32位整型下面,他們是這樣儲存的:

10000101 # 8位整型

10000000000000000000000000000101 # 32位整型

在計算機中,乙個正數的補碼就是它自身,例如00000101的補碼還是 00000101,而負數的補碼,就需要根據補碼的規則進行計算,例如在8位整型下,-5的補碼運算規則如下:

1.首先計算正5的二進位制數:00000101

2.逐位取反:11111010

3.加1:1111011

接下來,例如我們在8位整型下,計算9-5的值,那麼在計算機中,運算過程為:

1.求9的二進位制補碼(正數的補碼就是它自身):00001001

2.求5的二進位制補碼:11111011

3.兩個補碼相加:100000100

4.由於我們是在8位整型的環境下,所以最左邊這個1被直接丟掉了(溢位),結果變成:00000100

5.對結果再求補碼。由於結果00000100最左邊是0,表示正數,所以補碼是自身。因此二進位制數00000100對應的十進位制數為4,就是正確結果。

再來看看8位整型條件下:10 - 13 = -3的過程:

1.計算10的二進位制數補碼:00001010

2.-13的二進位制補碼:11110011

3.兩個補碼相加:11111101

4.對結果求補碼,由於最左邊這一位是1,表示負數,所以要把十進位制負數轉二進位制補碼的過程反過來

5.先轉成十進位制正數對應的二進位制數:00000011為3

6.把負號加上:-3,答案正確

這裡需要說明的是,在計算機中做二進位制數運算時,一定要明確是在多少位的整型前提下進行的,這樣才能夠正確處理位數溢位的問題。

由於位數溢位,在計算機中才會出現兩個正數相加,結果卻是負數的情況。例如:

127 + 1,在數學上結果為128,但是在計算機中,8位整型的情況下,結果為-128。原因如下:

1.計算127對應的二進位制補碼:01111111

2.計算1對應的二進位制補碼:00000001

3.兩個補碼相加:10000000

4.由於結果的最左側為1,表示負數,因此要把十進位制負數轉二進位制補碼的過程反過來

5.先轉成十進位制正數對應的二進位制補碼:10000000(沒錯,10000000的補碼恰好還是10000000)也就是128

6.加上負號:-128

二進位制減法運算

如果採用與十進位制減法相同的方法,那麼從乙個較大的二進位制數中減去乙個較小的無符號二進位制數就很容易了。示例如下 01101 十進位制數 13 00111 十進位制數 7 位 0 上的減法非常簡單 01101 00111 001001 00111 1000011 00111 110最後,最高兩位都執...

用C 實現二進位制的減法(包括二進位制小數)

用c 實現二進位制的減法 包括二進位制小數 作為乙個大學汪,我開始接觸程式設計。前兩天老師讓寫乙個二進位制算術編碼,於是我遇到了這樣乙個問題,怎麼實現二進位制數的減法。熬了兩天的夜,寫出了下面的 若有不對的地方大家海涵 構建二進位制減法方法 二進位制減數 二進位制被減數 二進位制得數 public ...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...