C# 二进制字面量

232

有没有类似于在 C# 中使用 0x 前缀表示十六进制的二进制字面量写法?0b 不起作用。

如果没有,那么有什么简单的方法可以实现呢?是某种字符串转换吗?


2
使用常量并为它们赋予适当的名称,那么您必须以十进制形式编写它们这一事实就不重要了。个人而言,我希望阅读if (a == MaskForModemIOEnabled) 而不是 if (a == 0b100101) - Lasse V. Karlsen
2
另外注意:如果您找到此帖子是因为想要一个位域,请考虑使用flags属性:http://msdn.microsoft.com/en-us/library/cc138362.aspx#sectionToggle0 - toxvaerd
20
两种都是非常好的建议,除了在定义位域时,这些命名常量定义可以更容易地使用二进制字面值进行阅读和编写。[Flags]枚举数量{ None=0, One=1, Some=0b10, Most=0b100, All=0b111 }。 - brianary
12个回答

1

自Visual Studio 2017(C# 7.0)起,您可以使用0b000001


1

基本上,我认为答案是否定的,没有简单的方法。使用十进制或十六进制常量-它们简单明了。@RoyTinkers的回答也很好-使用注释。

int someHexFlag = 0x010; // 000000010000
int someDecFlag = 8;     // 000000001000

这里的其他答案提供了几个有用的解决方法,但我认为它们并不比简单的答案更好。C#语言设计者可能认为'0b'前缀是不必要的。十六进制易于转换为二进制,并且大多数程序员都需要知道0-8的十进制等价物。
此外,在调试器中检查值时,它们将以十六进制或十进制显示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接