C语言之判断两个字节变量是否互补,怪现象

2019-12-27 19:02发布

两个字节变量A与B,断判是否互补

if((A^B)!=0x0ff) { 不互补的情况 }  //方法1

if(A !=(~B)) {  不互补的情况  }        //方法2

C = (~B);
if(A !=C) {  不互补的情况 }         //方法3



现在测试: A=0x00f ,B = 0x0f0

方法1和方法3 不会执行 { 不互补的情况 }, 方法2 执行了{  不互补的情况  }   。  望高手解答!这是什么情况
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
takashiki
1楼-- · 2019-12-28 14:16
 精彩回答 2  元偷偷看……
jyrpxj
2楼-- · 2019-12-28 18:11
flamma 发表于 2017-5-23 17:57
你确定你A,B,C定义的都是字节?

unsigned char A,B,C  
jyrpxj
3楼-- · 2019-12-28 21:25
snoopyzz 发表于 2017-5-23 19:26
8/16位机 ~0x00的结果是0xffff
32位机 ~0x00的结果是0xffffffff
以上就是原因

原来如此啊,才今天知道。这也难怪为什么方法2会行不通了。

多谢。真是活老学老。
love_ourdev
4楼-- · 2019-12-29 02:29
本帖最后由 love_ourdev 于 2017-5-23 20:35 编辑

根据不同的cpu位宽,你的B变量可能是0xFF0F,也可能是0xFFFFFF0F;这当然不等于0x0F!
这是C语言运算过程中的“整形提升”规则。
huarana
5楼-- · 2019-12-29 06:12
几乎是月经贴了 - -

一周热门 更多>