是C和C++中的按位AND运算符传递?

Raj*_*Raj 1 c bitwise-operators

我有一个问题:是否按位传递,特别是在C和C++中?

res=(1 & 2 & 3 & 4),这是res1=(1&2)res2=(3&4)res= (res1 & res2).这会是一样的吗?

Jer*_*fin 5

是的,按位AND在您使用该术语时是可传递的.

将事物视为一堆比特可能更容易.因此,如果我们有四个4位数字,我们可以这样做:

A = 0xB;
B = 0x3;
C = 0x1;
D = 0xf;
Run Code Online (Sandbox Code Playgroud)

如果我们简单地叠加它们:

A    1 0 1 1
B    0 0 1 1
C    0 0 0 1
D    1 1 1 1
Run Code Online (Sandbox Code Playgroud)

然后,按位AND的结果一次查看一列,并且当且仅当该列中的每一行都有1时,为该列生成1,因此在上面的情况下,我们得到:0 0 0 1,因为最后一列是唯一一个全部的.

如果我们把它分成两半来得到:

A    1 0 1 1
B    0 0 1 1
A&B  0 0 1 1
Run Code Online (Sandbox Code Playgroud)

和:

C    0 0 0 1
D    1 1 1 1
C&D  0 0 0 1
Run Code Online (Sandbox Code Playgroud)

然后and这些中间结果:

A&B 0 0 1 1 
C&D 0 0 0 1
End 0 0 0 1
Run Code Online (Sandbox Code Playgroud)

我们的结果仍然是相同的 - 在列中有零的任何地方,都会在中间结果中产生零,这将在最终结果中产生零.