int有符号的整型数溢出有什么规律吗??小白好难过...

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?