有符號數:就是用最高位表示符號(正或負),其余位表示數值大小。為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