详解链接:
https://www.bilibili.com/video/BV1oi4y1g7CF?p=22&vd_source=5a7458c6e057a2285bef5a5e5997231f
代码例子:
#include<stdio.h>
int main()
{
char a=3;
char b=127;
char c=a+b;
printf("%d\n",c);
return 0;
}
a-000000000000000000000000000000000011(二进制形)
b-0000000000000000000000000000001111111
但char是字符类型,只能存1个字符(8个比特位),而3,127都是整型类型为4个字符,
所以只能存8个比特位,规定存后面的
00000011-a , 01111111-b
相加的时候要整型提升
a-00000000000000000000000000000011
b-00000000000000000000000001111111
c-00000000000000000000000010000010
而c又是char型转化c-10000010
然而打印的是%d(整形),字符型转化到整形在是按照变量类型的符号位决定的
c-11111111111111111111111110000010-补码
11111111111111111111111110000011-反码
10000000000000000000001111100-原码
存的是补码,而执行的需要原码,
最后再将二进制转化为十进制为-126