在进行Github项目时,遇到了下面的图片和代码,我对它如何返回true感到困惑。谢谢!

代码:
    Console.WriteLine((0x90 & 0x10) == 0x10);
预期结果:

结果:
真正

c# - 这些十六进制值如何返回true?-LMLPHP

我只是不明白在比较0x90和0x10以查看它们是否相同时如何返回true。是因为0x90除以0x10吗?

最佳答案

这是bitwise and(0x90 & 0x10) == 0x10因为所有位0x900x10的集合恰好相同,所以恰好与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

09-06 05:29