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(); }