Raj*_*Raj 1 c bitwise-operators
我有一个问题:是否按位传递,特别是在C和C++中?
说res=(1 & 2 & 3 & 4),这是res1=(1&2)和res2=(3&4)和
res= (res1 & res2).这会是一样的吗?
是的,按位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)
我们的结果仍然是相同的 - 在列中有零的任何地方,都会在中间结果中产生零,这将在最终结果中产生零.