int8_t x = 0xd3
如果我要写出x的二进制表示,按道理0xd3=211,应该表示为011010011,如果舍掉最高位的0变成11010011.就是-45,正好我用char试了一下就是-45.
那int8_t z=-134也应该溢出了,我算了算应该输出122(01111010)但是我用char算了一下它输出了-134??
int8可以表示 -128~127
二进制
00000000 表示0
00000001 表示1
00000010 表示2
00000011 表示3
...
01111110 表示126
01111111 表示127
10000000 表示 -128
10000001 表示 -127
10000010 表示 -126
10000011 表示 -125
10000100 表示 -124
...
11111011 表示 -5
11111100 表示 -4
11111101 表示 -3
11111110 表示 -2
11111111 表示 -1
-1 + 1 = 0
也就是 11111111 + 1 = 100000000。那么1去哪里了,溢出了,剩下的就是00000000=0
总结下,0就是0,正数就是正数,负数就是反码+1
比如
11010011的符号位1,剩下的是1010011,反码(0变1,1变0)就是0101100,44。连起来-44,再-1=-45
因为char跟int8的取值范围不一样啊,int8是带符号的,你试一下uint8?