输出什么?
int main()
{
int i = -20;
unsigned int j = 10;
printf("%d\n", i+j);
system("pause");
return 0;
}
结果:-10
分析:-20:
10000000 00000000 00000000 00010100--->原码
11111111 11111111 11111111 11101011 --->反码
11111111 11111111 11111111 11101100--->补码
10是一个正数:(它的原码,反码及补码都是一样的)
11111111 11111111 11111111 11101100①
00000000 00000000 00000000 00001010②
①+②得到的是:
11111111 11111111 11111111 11110110--->补码
我们是以%d(有符号整形)的形式打印,内存里面存的是补码,而且又是一个有符号数的补码,所以补码减1取反得到它的原码:
11111111 11111111 11111111 11110110--->补码
11111111 11111111 11111111 11110101--->反码
10000000 00000000 00000000 00001010--->原码--(-10)