原碼,反碼和補碼

來源:互聯網
上載者:User

原碼 true code

原碼很簡單,一個10進位正數通過除2法轉換成的2進位數就是原碼。

比如8的原碼是:1000

反碼 complement,bitwise NOT

也很簡單,就是翻轉每個bit。比如:

NOT 0111  (decimal 7)  = 1000  (decimal 8)

C/C++語言中,用~運算子就可以得到反碼。

One's complement

這是一種對有符號整數的電腦內部二進位表示方法,in short,正數相同,負數用反碼。下面的例子來自wikipedia.

The table below shows all possible values in a 4-bit system, from −7 to +7.

     +      - 0   0000   1111   Note that +0 and −0 return TRUE when tested for zero, FALSE when tested for non-zero. 1   0001   1110 2   0010   1101 3   0011   1100 4   0100   1011 5   0101   1010 6   0110   1001 7   0111   1000

該方法由於有些缺點,並不常用。

Two's complement

這是最常用的電腦表示有符號整數的方法。

遇到正數不變,遇到負數是將二進位求反加1,忽略溢出。

The table below shows all possible values in a 4-bit system, from −7 to +7.

     +      - 0   0000      Note 0 has only one presentation:0000,no -0 1   0001   1111 2   0010   1110 3   0011   1101 4   0100   1100 5   0101   1011 6   0110   1010 7   0111   1001

這就是常說的補碼。

補碼

補碼的邏輯演算法是:(正數相同,符號位為0)

1.-7的數值部分(不包括符號) 表示成整數是111

2.加上符號1表示負數,因此是1111

3.只反轉非符號位,因此是1000

4.加上1,因此是1001

現在看看電腦如何使用two's complement表示-7的演算法。

1.7表示位00000111 (在電腦中數字至少佔一個位元組)

2.取反後,變成11111000

3.加1後,變成11111001 (高位不足電腦裡面用符號位補足)

兩者結果相同。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.