原碼,反碼與補碼,signed,unsigned char的儲存與大小
阿新 • • 發佈:2019-01-24
- 原碼:
- 如果機器字長為N個bit,那麼一個數的原碼就是N位二進位制數,最高位
是符號位,1代表負數,0代表正數。 - 反碼:
正數的反碼就是原碼,負數的反碼就是符號位不變,其他取反。 - 補碼:
- 正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
(計算機中的數都是以補碼形式儲存的)
補碼的形式是為了進行正負數二進位制的加減操作char為1個位元組,8個bit位,看看記憶體中是怎麼儲存的
十六進位制 二進位制(補碼) 反碼 原碼 實際值
char a = 127; //7f 0111 1111 127
char b = 128; //80 1000 0000 0111 1111 1000 0000 -128
char c = -128; //80 1000 0000 0111 1111 1000 0000 -128
char d = -1; //ff 1111 1111 1111 1110 1000 0001 -1
-128可能大家會有疑問,1000 0000是負數。因為它的原碼還是1000 0000為-0,與0是相同的數字,所以規定1000 0000為-128.也就是負數比正數多一個的原因,int同理。
所以signed char的最大值為127,最小值為-128.
unsigned是無符號的意思,就是沒有符號位。
unsigned char e = 256; //00 0000 0000 0
unsigned char f = -1; //ff 1111 1111 255
unsigned char g = 255; //ff 1111 1111 255
因為沒有符號位,所以原反補碼都一樣,為什麼-1的值為255呢,-1的原碼是0000 0001(沒符號位),反碼1111 1110,補碼為1111 1111也就是ff,所以unsigned char最大值255,最小值為0。