int main()
{
int a,b;
a = 234; //0000 0000 1110 1010 数据以补码形式存储
b = ~a; //1111 1111 0001 0101(取反得到的是补码) --> 1000 0000 1110 1011(原码)
//符号位为1,负数 补码求原码
printf("%d\n",b);
a = ~b; //0000 0000 1110 1010 -->符号位为0,正数 原码=补码
printf("%d\n",a);
return 0;
}
输出结果:
-235
234
原码:
最高位表示符号位. 剩下的位数.是这个数的绝对值的二进制.
反码:
正数的反码就是其原码.
负数的反码就是在其原码的基础之上 符号位不变,其他位取反.
补码:
正数的补码就是其原码.
负数的补码就是在其反码的基础之上+1
扫描二维码关注公众号,回复:
2445563 查看本文章
在计算机中,数据以补码的形式存储;
取反:将每一位取反,包括符号位
例如234;in类型占4字节,32位
原码(补码):0000 0000 1110 1010
取反 : 1111 1111 0001 0101(补码形式)
输出转化为原码:1000 0000 1110 1011(原码)(-235)
欢迎指正!