是否有一种方法可以在c#中编写二进制文字,比如在十六进制前加上0x?0b不行。
如果不是,有什么简单的方法可以做到呢?某种字符串转换?
是否有一种方法可以在c#中编写二进制文字,比如在十六进制前加上0x?0b不行。
如果不是,有什么简单的方法可以做到呢?某种字符串转换?
当前回答
c# 6.0和Visual Studio 2015中没有实现二进制文字特性。但在2016年3月30日,微软宣布了Visual Studio '15'预览的新版本,我们可以使用二进制文字。
我们可以使用一个或多个下划线(_)字符作为数字分隔符。所以代码片段看起来像这样:
int x = 0b10___10_0__________________00; //binary value of 80
int SeventyFive = 0B100_________1011; //binary value of 75
WriteLine($" {x} \n {SeventyFive}");
我们可以使用0b和0b中的任何一个,如上面的代码片段所示。
如果你不想使用数字分隔符,你可以像下面的代码片段一样使用它而不使用数字分隔符
int x = 0b1010000; //binary value of 80
int SeventyFive = 0B1001011; //binary value of 75
WriteLine($" {x} \n {SeventyFive}");
其他回答
c# 6.0和Visual Studio 2015中没有实现二进制文字特性。但在2016年3月30日,微软宣布了Visual Studio '15'预览的新版本,我们可以使用二进制文字。
我们可以使用一个或多个下划线(_)字符作为数字分隔符。所以代码片段看起来像这样:
int x = 0b10___10_0__________________00; //binary value of 80
int SeventyFive = 0B100_________1011; //binary value of 75
WriteLine($" {x} \n {SeventyFive}");
我们可以使用0b和0b中的任何一个,如上面的代码片段所示。
如果你不想使用数字分隔符,你可以像下面的代码片段一样使用它而不使用数字分隔符
int x = 0b1010000; //binary value of 80
int SeventyFive = 0B1001011; //binary value of 75
WriteLine($" {x} \n {SeventyFive}");
从Visual Studio 2017 (c# 7.0)开始,您可以使用0b000001
恐怕只有整数和十六进制直接(ECMA 334v4):
9.4.4.2整型字面值整型字面值用于写入值 类型为int、uint、long和ulong。 整数字面值有两种可能 形式:十进制和十六进制。
要解析,你可以使用:
int i = Convert.ToInt32("01101101", 2);
虽然不可能使用文字,也许BitConverter也可以是一个解决方案?
你总是可以创建准字面量,包含你想要的值的常量:
const int b001 = 1;
const int b010 = 2;
const int b011 = 3;
// etc ...
Debug.Assert((b001 | b010) == b011);
如果你经常使用它们,那么你可以把它们包装在一个静态类中以供重用。
然而,稍微偏离主题,如果你有任何与位相关的语义(在编译时已知),我建议使用Enum代替:
enum Flags
{
First = 0,
Second = 1,
Third = 2,
SecondAndThird = 3
}
// later ...
Debug.Assert((Flags.Second | Flags.Third) == Flags.SecondAndThird);