main(){
char x=0xFFFF;
printf("%d\n",x--);//為什麼輸出-1?
}
char 內存為1字節 最小值0,最大值255
char 0000 0000b ~ 1111 1111b
0xFFFF = 1111 1111 1111 1111b
0xFFFF賦值給char精度丟失結果就是11111111也就是最大值255,因為char最多只能裝11111111b 也就是0xff
這裡的255是無符號數也就是11111111沒有符號位得出的。但是作為d輸出那麼d的概念是有符號位的
那麼(1)1111111 第一位是符號位。1代表負數
因為是負數又因為數據存儲為補碼形式。轉換成原碼需要取反+1
111 1111取反就000 0000加1 就是000 0001
最後加上符號就是-1了
x++運算是編譯決定的。實際是先使用x值,然後再讓x自增。因此輸出不影響原值