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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 15737977316 中级黑马   /  2016-5-7 22:00  /  1110 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


int a=-67;                 //10000000 00000000 00000000  0100 0011
int b=3                  ;//  00000000 00000000 00000000  0000 0011
                           //或 -------------------------------------------------
                          //       10000000 00000000 00000000  0100 0011
   
printf("%d\n",a|b);//-65 ?????
xcode 运行结果是-65,但手算的结果为什么是-67啊?想不明白,求解惑。。。。

6 个回复

倒序浏览
-67 原码  1000 0000 0000 0000 0000 0000  0100 0011
     反码    1111 1111 1111 1111 1111 1111 1011 1100   补码是在反码的基础上加1;
-67补码    1111 1111 1111 1111 1111 1111 1011 1101
3的补码   0000 0000 0000 0000 0000 00000 0000 0011
或 运算--------------------------------------------------------- 只要有1就为1;
                1111 1111 1111 1111 1111 1111 1011 1111 补码 -1
                1111 1111 1111 1111 1111 1111 1011 1110 反码
                1000 0000 0000 0000 0000 0000 0100 0001  原码
3的补码=反码=原码
回复 使用道具 举报 1 0
寂静夜凄凉 发表于 2016-5-7 22:22
-67 原码  1000 0000 0000 0000 0000 0000  0100 0011
     反码    1111 1111 1111 1111 1111 1111 1011 1 ...

任何 数是以 2进制 的 "补码"  存在并且进行计算的..
回复 使用道具 举报 1 0
哈哈。。。感谢,明白了,突然就转不过来这个弯了,把二进制都是用补码来计算的给混乱了。。。。
回复 使用道具 举报
15737977316 发表于 2016-5-8 21:49
哈哈。。。感谢,明白了,突然就转不过来这个弯了,把二进制都是用补码来计算的给混乱了。。。。 ...

多练练就熟悉了。。
回复 使用道具 举报
多多练习练习熟悉熟悉就好了。。
回复 使用道具 举报
因为你算错了呗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马