作业帮 > 数学 > 作业

请前辈告知这些逻辑符号的意思,特别是《=那条语句

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/15 05:30:20
请前辈告知这些逻辑符号的意思,特别是《=那条语句
key_s = 0x00;
key_s |= K2; 就是进行或的运算,不是异或,异或是^.意思就是,对于某个bit,只要这两个数的这个bit钟有一个为1,则结果就为1,若连个都为0,则结果为0.会对数据类型的所有bit执行这个操作.

如果key_s和K2是相同数据类型的话,这两句执行的结果就是:key_s = K2;
第三句
key_s
再问: key_s是字节,K2是位,我很好奇这两者怎么比较,最后还返回return(key_s ^ key_v);这异或出来明显是字节,但是在调用的时候if(scan_key()),当位在用的,请解疑
再答: 在C语言里,没有位这个数据类型,虽然有字节和位的概念。K2有可能是这样定义的:0x04 key_s^key_v确实如你所理解的那样,是返回一个字节。 一个字节是8位,当任意一位不为0,也就是说只要b0-b7中有一个为1,那么,这个字节的值就肯定大于0,对吧? if(函数名()) 表示判断函数的返回值 != 0, 即相当于if( XXX != 0) 在C语言里,0表示FALSE,非0表示TRUE。 所以,它实际上是在判断scan_key()的返回字节里是否是至少有一位不为0 如果还有疑问的话,请随时联系
再问: 前辈,我这是MCU的程序,他定义K2为sbit K1 = P3^2;是位,位能与字节进行或运算,是与低位运算?
再答: sfr P3 = 0xB0; 头文件里有这个定义是吧?(我不懂MCU,搜了下,发现头文件里有P3定义。) 这下应该明白了吧? K2=0xB0^2=0xB2
再问: 前辈,这是定义P3的地址,包括在头文件里。我这里程序里写了sbit K2 = P3^2;,把K2定义为P3的一个位了,所以确实是字节和位的或
再答: 刚搜了下,MCU里原来是K2=0xB0^2表示0xB0寄存器的第二位。位的值只能为0或者1,所以应该是把key_s的最低一位 或上 K2 然后左右一位,这样在字节里面,从右往左b0-b7位的b1(即第二位)就跟K2的值完全一样了。 估计你的完整代码是同时取得K2,K4之类的位状态赋值到key_s里面。