2014-06-20 28 views
0

在代码中我有一个问题,我希望在枚举类中看到一个二进制格式。你知道在C#中我们有可能用0xFF表示十六进制(f.e.)。我想知道,如果我们有像二进制数类似的东西:二进制数表示在c中的一个长变量#

public static class MyEnum 
{ 
    public static const long TR =  000000001; 
    public static const long TRP =  000000010; 
    ... 
} 

此枚举代表1,2,4,8,...对于任何类型的我把里面的。只需要一个二进制数就可以看到简单的数字。

如何在C#中表示二进制文件?

+0

[这个提问/回答可以帮助(http://stackoverflow.com/questions/594720/c-sharp-binary-literals) –

回答

2

我不认为有是在C#

任何这样的表示从ECMA脚本

9.4.4.2 INTE ger文字Integer文字用于写入int,uint,long和ulong类型的值。整数文字有两种可能的 格式:十进制和十六进制。

还要检查.NET Compiler Platform ("Roslyn")

大概C# 6.0 will add that feature

C#现在尝试通过引入二进制文字来帮助我们。让我们从我们目前拥有的东西开始:

var num1 = 1234; //1234 
var num2 = 0x1234; //4660 

现在有什么可能?答案如下:

var num3 = 0b1010; //10 

当然,二进制数字变得非常快。这就是为什么介绍一个很好的分隔符:

var num4 = 0b1100_1010; //202 

可以有尽可能多的下划线。下划线也可以连接。最重要的事:做下划线也正常数字和十六进制文字工作:

var num5 = 1_234_567_890; //123456789 
var num6 = 0xFF_FA_88_BC; //4294609084 
var num7 = 0b10_01__01_10; //150 

下划线的唯一的限制是,该课程的数量不能开始使用它。

二进制文字将使枚举和位向量更容易理解和处理。它更接近我们在创建这样的结构时一直在想的东西。

2

如果你打算使用的两只大国,这样做的惯用方式是通过转变:

public static const long TR = 1L << 0; 
public static const long TRP = 1L << 1; 

L后缀成为必要时,您可以通过32个或更多的位置左移。

链接:C# does not provide a syntax for binary literals

+0

看起来有可能在没有构建: HTTP:/ /stackoverflow.com/questions/1246832/c-sharp-binary-constants-representation – vvv

+0

@vvv我也找到了相同的答案 - 只是添加了一个链接。谢谢! – dasblinkenlight

+0

不错我没有找到这个问题,我打开这个问题,抱歉没有选择你的示例,但它对我有效,我更喜欢用户user3414693的想法很容易看到数字。我过去使用过你的代码,我不记得,无论如何,谢谢 – David

2

你不能。还没有。它会在C#中推出6 的语法将类似于十六进制:

int i = 0b1110000101; 

另一大特点,补充这是,你可以在数字中使用下划线:

int i = 0b11_1000_0101; 
0

我不知道我是否曾经真正做到这一点,但这里是刚刚来到我的想法:

const byte b0001 = 0x1; 
    const byte b0010 = 0x2; 
    const byte b0100 = 0x4; 
    const byte b1000 = 0x8; 

    const long Value1 = (// 0b0111 
     b0001 | 
     b0010 | 
     b0100); 

    const long Value2 = (// 0b01100111 
     b0010 | 
     b0100) 
     << 4 | (
     b0001 | 
     b0010 | 
     b0100); 

或者你可以做一些这一点,这是一样的想法,但多一点可读:

const byte b0110 = 0x6; 
    const byte b0111 = 0x7; 

    const long Value3 = b0110 << 4 | b0111;