二进制和操作

时间:2013-09-03 15:45:37

标签: c# binary

我正在尝试根据MSDN关于& Operator

的文章在c#中进行一些二进制AND操作

如果我这样做:

1111 & 10 = 2 (0010) // Which is what i expect

然而,

1111 & 100 = 68 (1000100) // Which is **not** what i expect.

我原以为输出会是 100

enter image description here

我缺少什么?

3 个答案:

答案 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。