A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗冠坤 中级黑马   /  2014-3-18 18:23  /  1644 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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的补码形式?如何更好理解呢?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
我也是-14,跟电脑的位数有关,
补码在计算机原理中有, 你可以百度看原码,反码和补码的转换
回复 使用道具 举报
(刚去百度了,百度上确实有)我这个例子是在老师视频上学习的。


正数的原码就是反码也就是补码,这里是传说中的三位一体。
负数的反码是原码符号不动,其他位按位取反,补码是反码加1。
例子:拿 5   和   -5举例
十进制:                                      5                      -5
二进制(一字节表示):        0000 0101       1000  0101   原码
                                                                      1111  1010   反码
                                                                      1111  1011   补码

  

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
正数的补码,原码和原码相同;负数的补码是真值的绝对值的反码    加1;
以计算机存储字长为8位为例
真值               原码                                                       反码                                补码
+2                 0000 0010   (最高位为0为符号位)     0000 0010                         0000 0010  
-2                  1000  0010(最高位1为符号位)         1111 1101                         1111 1110
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马