有没有一种方法可以在C#中编写二进制文字,比如给十六进制加上前缀0x? 0b不起作用。
如果没有,有什么简单的方法可以做到呢?某种字符串转换?
发布于 2014-05-08 23:38:00
C# 7.0支持binary literals (和可选的数字分隔符(通过下划线字符))。
举个例子:
int myValue = 0b0010_0110_0000_0011;
您还可以在Roslyn GitHub page上找到更多信息。
发布于 2011-08-17 05:48:17
更新
C# 7.0现在有了二进制文字,这真是太棒了。
[Flags]
enum Days
{
None = 0,
Sunday = 0b0000001,
Monday = 0b0000010, // 2
Tuesday = 0b0000100, // 4
Wednesday = 0b0001000, // 8
Thursday = 0b0010000, // 16
Friday = 0b0100000, // etc.
Saturday = 0b1000000,
Weekend = Saturday | Sunday,
Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday
}
原创帖子
由于主题似乎已经转向在枚举中声明基于位的标志值,我认为有必要为这类事情指出一个方便的技巧。左移运算符(<<
)将允许您将位推入特定的二进制位置。将其与根据同一类中的其他值声明枚举值的能力相结合,您就拥有了一种非常易于阅读的位标志枚举的声明性语法。
[Flags]
enum Days
{
None = 0,
Sunday = 1,
Monday = 1 << 1, // 2
Tuesday = 1 << 2, // 4
Wednesday = 1 << 3, // 8
Thursday = 1 << 4, // 16
Friday = 1 << 5, // etc.
Saturday = 1 << 6,
Weekend = Saturday | Sunday,
Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday
}
发布于 2010-07-29 19:42:50
您始终可以创建准文字,即包含您想要的值的常量:
const int b001 = 1;
const int b010 = 2;
const int b011 = 3;
// etc ...
Debug.Assert((b001 | b010) == b011);
如果您经常使用它们,那么您可以将它们包装在一个静态类中以供重用。
但是,稍微偏离主题,如果您有任何与bits相关的语义(在编译时已知),我建议使用Enum:
enum Flags
{
First = 0,
Second = 1,
Third = 2,
SecondAndThird = 3
}
// later ...
Debug.Assert((Flags.Second | Flags.Third) == Flags.SecondAndThird);
https://stackoverflow.com/questions/594720
复制相似问题