C语言:关于数据在内存中的存储易错题(4)

输出什么?

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)

猜你喜欢

转载自blog.csdn.net/qq_42270373/article/details/81147333
今日推荐