标题: C语言程序 if((Key_Temp&0xf0)^0xf0) 求大家指导,不理解 [打印本页]

作者: happy2058    时间: 2020-4-20 23:36
标题: C语言程序 if((Key_Temp&0xf0)^0xf0) 求大家指导,不理解
unsigned char Key_Scan(void)
{
   uchar Key_Temp,Scan_Code,Temp_Code;
   P2 = 0XF0;
   Key_Temp = P2;
   if((Key_Temp&0xf0)^0xf0)   



后面的没写,最后一句为什么等价于 if((Key_Temp&0xf0)!=0xf0)   
   

作者: benclee    时间: 2020-4-21 08:13
Key_Temp先和0xfo与,取高四位,然后再同0Xfo异或。
例Key_Temp=0xB3
就是10110011&11110000=10110000
然后10110000^11110000=01000000
如果Key_Temp=oxf3
11110011&11110000=11110000
11110000^11110000=00000000
异或就是如果相等输出为0,
如果不相等,就输出按位异或后的结果。也就是非0.

作者: man1234567    时间: 2020-4-21 09:15
相等的数异或值为0,貌似与你那个所谓的等价于正好反过来。
作者: happy2058    时间: 2020-4-21 09:34
benclee 发表于 2020-4-21 08:13
Key_Temp先和0xfo与,取高四位,然后再同0Xfo异或。
例Key_Temp=0xB3
就是10110011&11110000=10110000

是不是,非0判断为假,if不执行
作者: f556    时间: 2020-4-21 09:59
楼上说的很详细。异或是跟1异反转,跟0异不变。
Key_Temp&0xf0取高4位,^0xf0后,相当于找出高4位中是否有哪位不为1。故与!=0xf0是相同的。
作者: benclee    时间: 2020-4-21 10:32
0为假,非0为真。就是如果相同输出为0,不执行。
如果输出为非0,也就是不相同,执行。(相当于!=)
作者: happy2058    时间: 2020-4-21 11:32
感谢大家
作者: happy2058    时间: 2020-4-21 11:49
感谢大家
作者: 墨栀    时间: 2020-4-21 15:10
异或是两个数相同为0,不同为1,可以和不等于等价。判断的都是两个数的每一位相不相等




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1