我正在尝试根据MSDN关于& Operator
的文章在c#中进行一些二进制AND操作如果我这样做:
1111 & 10 = 2 (0010) // Which is what i expect
然而,
1111 & 100 = 68 (1000100) // Which is **not** what i expect.
我原以为输出会是 100
我缺少什么?
答案 0 :(得分:7)
您指定的数字1111和100被视为基数10,而不是二进制数。
如果你想要二进制整数1111,你应该输入15
,因为它是基数为10的版本。所以:
15 & 4
将按预期变为4
。
C#中没有用于指定二进制整数文字的语法。您没有别的选择,只能自己将它们转换为基数,或者使用运行时转换,例如通过Convert.ToInt
。
答案 1 :(得分:3)
除了使用十进制之外,如果以0x
作为前缀,则十六进制也可以使用,例如: 0xF & 0x4
但是,虽然二进制文字没有前缀,但您可以这样做:
Convert.ToInt32("1111", 2) & Convert.ToInt32("100", 2)
答案 2 :(得分:2)
输出正确。
重点是您将数字视为二进制数。这里的数字被视为十进制整数。从C# specification - integer literals和SO问题C# binary literals可以看出,C#中没有二进制常量最多6个。
然后在下面找到解释。
1111 10001010111
& 10 & 00000001010
= 2 = 00000000010
1111 10001010111
& 100 & 00001100100
= 68 = 00001000100
有关& operator的更多信息,请访问MSDN。