原碼、反碼與補碼--無符號數和有符號數


有符號數:就是用最高位表示符號(正或負),其余位表示數值大小。為1時,表示該數為負值,為0時表示為正值。 

無符號數:所有位都用於表示數的大小。

C語言中就是存在無符號數(unsigned)和無符號數。例如 unsighed int  b  =15, int  a = 1;

一個字節(byte)是8位   ,從右往左數 --> 1111 1110   最高位是1  最低位 0

無符號數: 1111 1111    值:255    

有符號數 0111 1111    值:127   (0表示正數)     

在Java中所有得數據類型都是有符號數 。

而在計算機所有的數都是用二進制來表示的。

byte 類型  是 1 個字節 ,占8位

int  類型  是 4 個字節  ,有32位

假設有一個int類型的數,值位5,二進制表示為101,

但是int類型在計算機中有4個字節,所以表示為 00000000  00000000 00000000  00000101

這是正數的表達方式,而負數是以其正值的補碼形式表示:

反碼:

正數的反碼就是其本身。5 =   0000 0101 [原]    0000 0101 [反碼]

負數的反碼是在原碼的基礎上,符號位不變,其余位按位取反。 - 5  = 1000 0101[原]    1111 1010[反碼]

補碼:

正數的補碼就是其本身

負數的補碼是在其原碼的基礎上, 符號位不變, 其余各位取反, 最后在最低位+1. (即在反碼的基礎上+1)

-5  1000 0101 --->  1000 1010 [反] --->1000 1011[補碼]

-8   1000 1000    反碼為 1111 0111, 負數的補碼 +1,就是它的補碼,如 -8 的補碼為 1111 1000

 

反碼 補碼 原碼

 

 


免責聲明!

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



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