在Github项目上工作的时候,我遇到了像图片和图片一样的线路。下面的代码,我感到困惑的是它如何返回true。谢谢!
守则:
Console.WriteLine((0x90 & 0x10) == 0x10);
预期结果:
假
结果:
真
我只是不明白在比较 0x90 和 0x10 以查看它们是否相同时,它会返回true。是因为 0x90 可以被 0x10 分割吗?
答案 0 :(得分:4)
它是bitwise and。 (0x90 & 0x10) == 0x10
因为所有位0x90
和0x10
的集合恰好具有共同点,所以恰好与" 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
这是真的