首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#二进制文字

C#二进制文字
EN

Stack Overflow用户
提问于 2009-02-27 13:26:48
回答 8查看 170.5K关注 0票数 209

有没有一种方法可以在C#中编写二进制文字,比如给十六进制加上前缀0x? 0b不起作用。

如果没有,有什么简单的方法可以做到呢?某种字符串转换?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2014-05-08 23:38:00

C# 7.0支持binary literals (和可选的数字分隔符(通过下划线字符))。

举个例子:

代码语言:javascript
复制
int myValue = 0b0010_0110_0000_0011;

您还可以在Roslyn GitHub page上找到更多信息。

票数 171
EN

Stack Overflow用户

发布于 2011-08-17 05:48:17

更新

C# 7.0现在有了二进制文字,这真是太棒了。

代码语言:javascript
复制
[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
}

原创帖子

由于主题似乎已经转向在枚举中声明基于位的标志值,我认为有必要为这类事情指出一个方便的技巧。左移运算符(<<)将允许您将位推入特定的二进制位置。将其与根据同一类中的其他值声明枚举值的能力相结合,您就拥有了一种非常易于阅读的位标志枚举的声明性语法。

代码语言:javascript
复制
[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
}
票数 193
EN

Stack Overflow用户

发布于 2010-07-29 19:42:50

您始终可以创建准文字,即包含您想要的值的常量:

代码语言:javascript
复制
const int b001 = 1;
const int b010 = 2;
const int b011 = 3;
// etc ...
Debug.Assert((b001 | b010) == b011);

如果您经常使用它们,那么您可以将它们包装在一个静态类中以供重用。

但是,稍微偏离主题,如果您有任何与bits相关的语义(在编译时已知),我建议使用Enum:

代码语言:javascript
复制
enum Flags
{ 
    First = 0,
    Second = 1,
    Third = 2,
    SecondAndThird = 3
}
// later ...
Debug.Assert((Flags.Second | Flags.Third) == Flags.SecondAndThird);
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/594720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档