-1在內存中以補碼的形式存在,
源碼:1(符號位)0000 0001
補碼=源碼取反加1(記住:符號位不變) 即1111 1110+1
即為 1111 1111 unsigned char(1111 1111)當然就是255了
同理可推出unsigned char(-2) 為 254
順便說一下:
原碼就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。
反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
另一種算法:
無符號變量的值 = 類型可以取值的個數 + 【負數 * (-1) / 類型可以取值的個數】 * 類型可以取值的個數 + 負數
unsigned char(-2) 以上套用得:
無符號變量的值 = 256 + [(-2)*(-1)/256]*256 + (-2)
= 256 + 0*256 + (-2)
= 254