-1

我正在尝试根据关于& 运算符的 MSDN 文章在 c# 中执行一些二进制 AND 操作

如果我做:

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

然而,

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

我原以为输出会是100

在此处输入图像描述

我错过了什么?

4

3 回答 3

7

您指定的数字 1111 和 100 被视为以 10 为底的数字,而不是二进制数字。

如果你想要二进制整数 1111 你应该输入15,因为那是基数 10 版本。所以:

15 & 44正如预期的那样,将变为。

C# 中没有用于在二进制中指定整数文字的语法。您别无选择,只能自己将它们转换为十进制,或者使用运行时转换,例如 through Convert.ToInt

于 2013-09-03T15:49:19.147 回答
3

除了使用十进制之外,十六进制也可以在前缀为 的情况下使用0x,例如0xF & 0x4

但是,虽然二进制文字没有前缀,但您可以这样做:

Convert.ToInt32("1111", 2) & Convert.ToInt32("100", 2)

于 2013-09-03T15:57:48.563 回答
2

输出是正确的。

关键是您将数字视为二进制数。这里的数字被视为十进制整数。从 C# 规范中可以看出,C# 中没有最多 6 个二进制常量- integer literals和 SO question C# binary literals

但是,请在下面找到解释。

1111          10001010111
& 10        & 00000001010
= 2         = 00000000010

 1111         10001010111
& 100       & 00001100100
= 68        = 00001000100

更多关于& 运算符的信息可以在 MSDN 中找到。

于 2013-09-03T16:04:31.137 回答