黑马程序员技术交流社区

标题: 你们运行这段代码结果是什么? [打印本页]

作者: 罗冠坤    时间: 2014-3-18 18:23
标题: 你们运行这段代码结果是什么?
  1. int main()
  2. {
  3.     int x = 13;
  4.     int z = ~x;    //z = 14
  5.     printf("z:%d",z);
  6.     return 0;
  7. }
复制代码


我运行为-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