原碼,補碼,反碼

來源:互聯網
上載者:User

標籤:

原碼,補碼,反碼,這東西在我剛開始學習java的時候困擾了我好一會,看書本上的說法總感覺缺點什麼

究其因歸結為一個問題:1000 0101為什麼不是-5?

1) 後來查了資料,自己梳理了下,理清楚了,在電腦中,系統統一使用補碼來表示和儲存,原因在於通過這種規則可以將符號位參與邏輯運算,於是有了以下兩條規則

① 正數: 補碼 = 反碼 = 原碼

② 負數: 補碼 = 反碼 + 1, 反碼 = 該負數對應的正數原碼最高位取1

 

2) 下面主要說明負數的補碼換算過程,就以-5為例:

① 5的原碼0000 0101,最高位取1,得到-5的原碼1000 0101

② 最高位不變,其他位取反,得到-5的反碼1111 1010

③ 反碼 + 1,得到-5的補碼1111 1011,所以-5的補碼是1111 1011

 

3) 那前面問題中的1000 0101究竟是什嗎?我們不妨逆推下

① 1000 0101是一個負數的補碼,減1,得到它的反碼為1000 0100

② 那它的原碼為最高位不變,其餘位取反,得到1111 1011

③ 則該負數對應的正數原碼為0111 1011,換算成十進位為2^6 + 2^5 + 2^4 + 2^3 + 2^1 + 1 = 123

因此1000 0101為-123,而非-5,只要記住一點,我們所看到的負數並非真正的負數,而是負數的補碼形式,要換算成原碼才是它真正的值

 

4) 我們還需要注意幾個點

① 0的補碼為0000 0000,-128補碼為1000 0000(同理還有-2^15等)

② 正數的補碼 + 該正數對應負數的補碼 = 0000 0000

-5:  1111 1011

  5:  0000 0101

兩者之和為0000 0000,滿足數學運算邏輯

 

原碼,補碼,反碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.