#include <stdio.h>
#include <Windows.h>
int main(){
int i = -20;
unsigned int j = 10;
printf("%d\n", i + j);
system("pause");
return 0;
}
计算机是以补码进行计算的(负数原码符号位不变,按位取反,得到补码,正数的补码是他本身)
以上题为例
i的原码:1000 0000 0000 0000 0000 0000 0001 0100
反码:1111 1111 1111 1111 1111 1111 1110 1011
补码:1111 1111 1111 1111 1111 1111 1110 1100
j的原码:0000 0000 0000 0000 0000 0000 0000 1010
求和--------------------------------------------------------------------------------
1111 1111 1111 1111 1111 1111 1111 0110(-1)
1111 1111 1111 1111 1111 1111 1111 0101(符号位不变,按位取反)
结果: 1000 0000 0000 0000 0000 0000 0000 1010
所以最终结果为-10