首先,说下结论,这里由于各种平台的规定不同,对char的默认类型可能不同(unsigned和signed), 所以也有人认为结果不能确定。这里主要要说的是PC上常见的把char默认为signed char的情况,如VS中,运行一遍你会发现结果是-128.
但是8位的signed char型,除去符号位1位,如何表示-128,这里计算机把它拓展成16位,最后再截断取后8位。
-128 原码 1000 0000 1000 0000
-128 反码 1111 1111 0111 1111
-128 补码 1111 1111 1000 0000
从这里可以看出-128的补码,截取8位后为1000 0000,正好是127+1;
同理,可以验证,把-129赋给signed char
-129 原码 1000 0000 1000 0001
-129 反码 1111 1111 0111 1110
-129 补码 1111 1111 0111 1111
截取8位后为0100 0000,所以在程序中打印出来应为127。