这些十六进制值如何返回true?

时间:2017-12-03 19:26:07

标签: c# .net hex

在Github项目上工作的时候,我遇到了像图片和图片一样的线路。下面的代码,我感到困惑的是它如何返回true。谢谢!

守则:
    Console.WriteLine((0x90 & 0x10) == 0x10);

预期结果:


结果:

Code

我只是不明白在比较 0x90 0x10 以查看它们是否相同时,它会返回true。是因为 0x90 可以被 0x10 分割吗?

3 个答案:

答案 0 :(得分:4)

它是bitwise and(0x90 & 0x10) == 0x10因为所有位0x900x10的集合恰好具有共同点,所以恰好与" on"的所有位的集合相同。在0x10。在这种特殊情况下,只有一位。

按位并且意味着"给我一个新的数字,其中每个位为1,当且仅当该位是这两个中的一个"。

所以,当我将数字排在另一个之上时(对齐 - 请注意我从左边用零填充,以便它们的宽度相同),然后按照每列进行操作获取该列的结果:如果它在两行中排在最前面,则它在底行中为1。如果它 排在最前面的零,则它在底部为零。

     10010000    // == 0x90
 &   00010000    // == 0x10
-------------
     00010000    // == 0x10

按位操作非常违反直觉,直到你写出零和1并按列排列它们。

这是另一个例子:0x98& 0x18 == 0x18:

     10011000    // == 0x98
 &   00011000    // == 0x18
-------------
     00011000    // == 0x18

最后一个例子:

     10001100    // == 0x8C
 &   00011000    // == 0x18
-------------
     00001000    // == 0x10

答案 1 :(得分:0)

如果你把它们视为位:

0x90: 10010000
0x10: 00010000

按位 - 然后选择两个数字都为1的列

00010000

哪个是0x10

对比0x90 | 0x10将是0x90,因为它是至少有一个数字具有1:

的列

如果您想亲自试用,程序员模式下的Windows Calculator应用程序可让您执行按位操作并轻松实现从十六进制到二进制文件

答案 2 :(得分:0)

000 1 0000 == 0x10

100 1 0000 == 0x90

&安培;

000 1 0000 == 0x10

===============

(0x90& 0x10)等于0x10

所以

0x10 == 0x10

这是真的