C语言:2取反后结果为-3,原因?

#include <stdio.h>
//int占用四个字节 
//2的原码:00000000  00000000 00000000 00000010
//2取反后:11111111  11111111 11111111 11111101 
//任何类型的数据在计算机中都是以二进制补码形式存储的
//正数的原码 补码都相同
//负数的补码:负数的原码除符号位外按位取反得到反码,反码再加1 为其补码 
//2取反后:11111111  11111111 11111111 11111101被认为是某个数的补码
//因此需要先减1,结果为: 11111111  11111111 11111111 11111100
//除符号位其他位按位取反:10000000 00000000 000000000 00000011
//最高位为符号位,负数,11转为10进制,结果为-3 
main()
{
    printf("%d",~2);
    getchar();
 }

 

posted @ 2022-10-17 20:12  myrj  阅读(159)  评论(0编辑  收藏  举报