初識原碼反碼補碼


原碼為第一位正負,第二位及以后為大小;

反碼:正數的反碼不變,負數的反碼為第一位(符號位)不變其余取反;

補碼:正數補碼不變,負數補碼為第一位(符號位)不變其余取反再加1,即為反碼加一。

   小例子:     假設比特16位,

        其中第一位是符號0為正,1為負;

        所以也就是最大為0111111111111111

        然后此時大小為0+2+4+8+-------+2的14次方=2的15次方-1;

        即為最大范圍,最小為同理;

    然而最小為-32768,最大為32767;經百度,知道有+0與-0。

        +0的原碼為0000,0000,0000,0000,-0的原碼為1000,0000,0000,0000.

       又因為-0的補碼為0000,0000,0000,0000與+0的補碼相同,重復,

經過百度:

        “但是,我們知道,16位二進制數可以表示216個編碼,而在補碼中零的編碼只有一個,也就是補碼中會比原碼多一個編碼出來,那么我們可以知道 ,他就是1000000000000000,因為任何一個原碼都不可能在轉成補碼時變成1000000000000000。

         所以,人為規定1000000000000000這個補碼編碼為-32768。 所以,補碼系統中,范圍是-32768~32767。”
         “因此,實際上,二進制的最小數確實是1111111111111111,只不過二進制的補碼的最小值它才是1000000000000000,而補碼的1111111111111111是二進制值的-1。 ”
 所以綜上,正負的那個最值數並不相同
             比如:int類型是4字節,存放二進制的32位,同理最高位存放符號,他能存放的最大數就是2的31次方減1,也就是2147483647,而表面上最小的也是負2147483647,這樣他的原碼范圍就出來了,其正確范圍為-2147483648 - 2147483647,它們的正負都是不對稱的。
最后加上無負號情況

 

       

 


免責聲明!

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



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