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