黑马程序员技术交流社区
标题:
你们运行这段代码结果是什么?
[打印本页]
作者:
罗冠坤
时间:
2014-3-18 18:23
标题:
你们运行这段代码结果是什么?
int main()
{
int x = 13;
int z = ~x; //z = 14
printf("z:%d",z);
return 0;
}
复制代码
我运行为-14,可是书上说是14.
我有点晕,不太理解负整数的2的补码是什么意思?
谁能详细讲解一下整个运算过程?
什么是2的补码形式?如何更好理解呢?
作者:
bubuatt
时间:
2014-3-18 19:12
我也是-14,跟电脑的位数有关,
补码在计算机原理中有, 你可以百度看原码,反码和补码的转换
作者:
远人
时间:
2014-3-18 22:40
(刚去百度了,百度上确实有)我这个例子是在老师视频上学习的。
正数的原码就是反码也就是补码,这里是传说中的三位一体。
负数的反码是原码符号不动,其他位按位取反,补码是反码加1。
例子:拿 5 和 -5举例
十进制: 5 -5
二进制(一字节表示): 0000 0101 1000 0101 原码
1111 1010 反码
1111 1011 补码
作者:
舒华
时间:
2014-3-19 14:46
正数的补码,原码和原码相同;负数的补码是真值的绝对值的反码 加1;
以计算机存储字长为8位为例
真值 原码 反码 补码
+2 0000 0010 (最高位为0为符号位) 0000 0010 0000 0010
-2 1000 0010(最高位1为符号位) 1111 1101 1111 1110
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2