1. 程式人生 > >原碼,反碼與補碼,signed,unsigned char的儲存與大小

原碼,反碼與補碼,signed,unsigned char的儲存與大小

  • 原碼
  • 如果機器字長為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。