黑马程序员技术交流社区

标题: 提问c语言 二进制或运算 [打印本页]

作者: 15737977316    时间: 2016-5-7 22:00
标题: 提问c语言 二进制或运算

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啊?想不明白,求解惑。。。。
作者: 寂静夜凄凉    时间: 2016-5-7 22:22
-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的补码=反码=原码

作者: 寂静夜凄凉    时间: 2016-5-7 22:24
寂静夜凄凉 发表于 2016-5-7 22:22
-67 原码  1000 0000 0000 0000 0000 0000  0100 0011
     反码    1111 1111 1111 1111 1111 1111 1011 1 ...

任何 数是以 2进制 的 "补码"  存在并且进行计算的..
作者: 15737977316    时间: 2016-5-8 21:49
哈哈。。。感谢,明白了,突然就转不过来这个弯了,把二进制都是用补码来计算的给混乱了。。。。
作者: 寂静夜凄凉    时间: 2016-5-8 22:40
15737977316 发表于 2016-5-8 21:49
哈哈。。。感谢,明白了,突然就转不过来这个弯了,把二进制都是用补码来计算的给混乱了。。。。 ...

多练练就熟悉了。。
作者: 寂静夜凄凉    时间: 2016-5-8 22:41
多多练习练习熟悉熟悉就好了。。
作者: john6g    时间: 2016-5-9 22:46
因为你算错了呗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2