在进行Github项目时,遇到了下面的图片和代码,我对它如何返回true感到困惑。谢谢!
代码:
Console.WriteLine((0x90 & 0x10) == 0x10);
预期结果:
假
结果:
真正
我只是不明白在比较0x90和0x10以查看它们是否相同时如何返回true。是因为0x90除以0x10吗?
最佳答案
这是bitwise and。 (0x90 & 0x10) == 0x10
因为所有位0x90
和0x10
的集合恰好相同,所以恰好与0x10中“ on”的所有位的集合相同。在这种特殊情况下,只有一点点。
按位表示“给我一个新的数字,当且仅当该位在这两个数字中均是1时,每个位均为1”。
因此,当我将一个数字排在另一个数字的上方时(右对齐-请注意,我从左开始填充零,以便它们具有相同的宽度),请沿着每一列向下移动以获取该列的结果:如果是1这两行都在最上面,在最下面一行是1。如果在上一行的任一行中为零,则在下一行为零。
10010000 // == 0x90
& 00010000 // == 0x10
-------------
00010000 // == 0x10
在您写出零和一并按列将它们排成一行之前,按位运算完全违反直觉。
这是另一个示例:0x98&0x18 == 0x18:
10011000 // == 0x98
& 00011000 // == 0x18
-------------
00011000 // == 0x18
最后一个例子:
10001100 // == 0x8C
& 00011000 // == 0x18
-------------
00001000 // == 0x10