理解单个&符运算符(&)对整数的行为

时间:2011-01-21 10:00:44

标签: c# operators bitwise-operators

我知道单个&符运算符通常用于'按位AND'运算。但是,任何人都可以帮助解释当您使用它来比较两个数字时得到的有趣结果吗?

例如;

(6 & 2) = 2
(10 & 5) = 0
(20 & 25) = 16
(123 & 20) = 16

这些结果之间似乎没有逻辑联系 - 我错过了什么吗?在线文档似乎只是指布尔值或单个位的比较。

7 个答案:

答案 0 :(得分:51)

比较每个的二进制表示。

    110 &     010 =     010
   1010 &    0101 =    0000
  10100 &   11001 =   10000
1111011 & 0010100 = 0010000

在每种情况下,只有在输入的左侧和右侧都为1时,结果中的数字才为1。

答案 1 :(得分:6)

您需要将您的数字转换为二进制表示,然后您会看到结果如6& 2 = 2实际上是110& 010 = 010等 10& 5是1010& 0101 = 0000

答案 2 :(得分:4)

二进制和操作在整数上执行,以二进制表示。例如

110  (6)
010  (2)
--------
010  (2)

答案 3 :(得分:2)

6     = 0110
2     = 0010 
6 & 2 = 0010

20      = 10100
25      = 11001
20 & 25 = 10000

(看起来你的计算错误了)

等等...

答案 4 :(得分:2)

在内部,整数存储在binary format中。我强烈建议你阅读一下。了解数字的按位表示非常重要。

话虽如此,按位比较比较参数的位:

Decimal: 6    &    2 = 2
Binary:  0110 & 0010 = 0010

答案 5 :(得分:2)

按位AND就是这样:它在Bits上执行AND操作。

因此,要预测结果,您需要查看位数,而不是数字。

只有当两个数字中的1位于同一位置时,

AND才会给出1:

6(110) & 2(010) =  2(010)
10(1010) & 5(0101) = 0(0000)

如果在同一位置的任一数字中有1,则按位OR将给出1:

6(110) | 2(010) =  6(110)
10(1010) | 5(0101) = 15(1111)

答案 6 :(得分:0)

Bitwize AND逐位匹配二进制表示法中的位,结果是两个数字之间的比特。

要将数字转换为二进制,您需要了解二进制系统。

例如 6 = 110二进制

110表示1x4 + 1x2 + 0x1 = 6.

2然后是 0x4 + 1x2 + 0x1 = 2。

Bitwize并且仅保留两个数字都设置位置的位置,在这种情况下为2的位,然后结果为2.

每个额外位是最后一位,因此4位数使用乘法器8,4,2,1并且可以预先表示0到15之间的所有数字(乘数之和)。