在C中:var=x | y | z;意思是

在C中:var=x | y | z;意思是,c,C,因此,我最近开始使用TI的CC2650设备,并试图通过研究他们的一些示例应用程序来学习如何对其进行编程。我看到很多以这种格式声明的变量,我不知道它是什么意思: var1 = x | y | z; 在上面的示例中,var1是uint8\u t类型。是二进制位的或运算符。例如:0x00ff | 0xff00是0xffff 按位OR运算符,所以如果x=5(101)y=8(1000)和z=20(10100),括号中的值是二进制值,所以 x | y | z=101 | 1000 | 10100=1110

因此,我最近开始使用TI的CC2650设备,并试图通过研究他们的一些示例应用程序来学习如何对其进行编程。我看到很多以这种格式声明的变量,我不知道它是什么意思:

var1 = x | y | z;

在上面的示例中,
var1
是uint8\u t类型。

是二进制位的
运算符。例如:
0x00ff | 0xff00
0xffff

按位OR运算符,所以如果x=5(101)y=8(1000)和z=20(10100),括号中的值是二进制值,所以
x | y | z=101 | 1000 | 10100=11101
C中的运算符
称为s。与其他按位运算符(例如和&)类似,按位或仅在位级别操作。如果任一位中有一位为
1
,则其结果为
1
,只有当两位均为
0
时,其结果为零。可以称之为管道的
|
!请看以下内容:

bit a   bit b   a | b (a OR b)
   0       0       0
   0       1       1
   1       0       1
   1       1       1
在表达式中,您提到:

var1 = x | y | z | ...;
由于在一条语句中有许多
|
,您必须知道,按位OR运算符has表示操作从左侧分组。因此,上述表达式将被解释为:

var1 = (x | y) | z | ...
=> var1 = ((x | y) | z) | ...
....

阅读更多关于关联性的内容。

我认为最好说操作
是对称的(交换的),并且是左右关联的。@M.Shaw,不要弄乱逻辑或
|
和按位或
|
。对不起,我删除了第二部分-但该操作仍然是可交换的,并且是左关联和右关联的。@M.Shaw,看一看。决定它是左关联和右关联是一种设计选择(或者可能是任意的)。很明显,
a | b==b | a
(a | b)| c==a |(b | c)
对于任何
a,b,c
。如果是编译器,我甚至不知道它是一个C逻辑运算符。所以我甚至不知道用谷歌搜索。可能是重复的