c语言中按位或|

2024-11-17 18:22:55
推荐回答(2个)
回答(1):

这里涉及到的是位操作。
首先你需要了解内存中的数字存储形式(二进制)。这里的a是一个标识符,用于存储标记。具体而言,a是一个八个比特长的变量。比如0b00000000,0b00001110等等。用十六进制可以简写为0x00, 0x0E等等(这里两个例子没有任何含义)
在C语言中“<<”表示移位操作,比如0b00000001左移3位,就会变成0b00001000;左移2位就是0b00000100;等等。
然后你这里没有给出digitalRead()函数的返回类型,我认为是0或1。在这种情况下,0写成8位二进制是0b00000000,左移任何位都是0,如果是1的话,左移x位表示把从右往左数第x+1位变成1,比如:1<<3表示0b00001000,从右至左第4位变成1。
接下来,你有4个digitalRead函数,但是你想同时关心4个返回值。怎么办呢?我把第x个返回值放在从右往左数第x位上。比如0b00000110,表示第二、三个返回值是1,剩下两个返回值是0。那么你按上面的移位操作,可以得到这样4个数:
0b 0000 0000 (返回值是0)
0b 0000 0100 (返回值是1)
0b 0000 0010 (返回值是1)
0b 0000 0000 (返回值是0)
按位进行“或”操作。“或”操作你肯定明白,有1就是1,没1才是0
所以根据结果可以知道4个返回值是怎么样的。于是在switch语句中的返回值表明,如果是0x00(表示4个返回值是0),或是0x0F(4个返回值都是1)(F是4个1),则进行某种操作。
不知道明白了没?

回答(2):

两个相应的二进制位中有一个为1,该位的结果就是1,
即1|1=1,1|0=1,0|0=0
你写的X是要化为二进制后运算的,再将结果比较