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

Jon*_*han 30 c# operators bitwise-operators

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

例如;

(6 & 2) = 2
(10 & 5) = 0
(20 & 25) = 16
(123 & 20) = 16
Run Code Online (Sandbox Code Playgroud)

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

Jef*_*tin 52

比较每个的二进制表示.

    110 &     010 =     010
   1010 &    0101 =    0000
  10100 &   11001 =   10000
1111011 & 0010100 = 0010000
Run Code Online (Sandbox Code Playgroud)

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

  • @Rekin:对于像这样的小数字,我可以在脑中转换十进制,十六进制和二进制,非常多.我还找到了一个将大部分ASCII表塞进去的角落. (6认同)

Val*_*zub 6

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