C# 二进制常量表示法

8

我在这个问题上真的很困惑。在C#中,有以下十六进制常量表示格式:

int a = 0xAF2323F5;

有二进制常量表示格式吗?

什么意思? 常量整数a的值为2938315765。 - Paco
1
谢谢,我猜你的结果是正确的,但我正在寻找系统化的解决方案。我需要为每个二进制常量转换发布一个stackoverflow问题吗? - Andrei Rînea
3
这是一个重复的问题,与https://dev59.com/83RB5IYBdhLWcg3wiHr7相同。 - Dan Diplo
好的指针,不知道要搜索“字面值”,尽管我应该知道。也许Jeff关于搜索算法有点糟糕(39%?)是正确的。 - Andrei Rînea
在链接的帖子https://dev59.com/83RB5IYBdhLWcg3wiHr7#3776553中发布了我的答案。 - Dmitry Tashkinov
4个回答

8

在C#中没有二进制字面量。当然,您可以使用Convert.ToInt32解析二进制格式的字符串,但我认为这不是一个好的解决方案。

int bin = Convert.ToInt32( "1010", 2 );

我会让这个问题保持开放状态几个小时,但如果这是第一个正确的答案,它将被选为官方答案。谢谢。 - Andrei Rînea
真的,那很有效,在大多数情况下都很有用。不幸的是,如果您在 switch(myVariable) { case bin: Console.WriteLine("value detected"); break; } 语句中使用它,它将无法工作,因为 case 只允许常量。 - Matt
1
现在可以使用C# 7(截至本评论已经超过5年)作为0b1010。请参见@Luis的答案。 - Mike

4

从C#7开始,你可以在代码中表示二进制文字值:

private static void BinaryLiteralsFeature()
{
    var employeeNumber = 0b00100010; //binary equivalent of whole number 34. Underlying data type defaults to System.Int32
    Console.WriteLine(employeeNumber); //prints 34 on console.
    long empNumberWithLongBackingType = 0b00100010; //here backing data type is long (System.Int64)
    Console.WriteLine(empNumberWithLongBackingType); //prints 34 on console.
    int employeeNumber_WithCapitalPrefix = 0B00100010; //0b and 0B prefixes are equivalent.
    Console.WriteLine(employeeNumber_WithCapitalPrefix); //prints 34 on console.
}

更多信息可以在这里找到。


Translated: "更多信息可以在这里找到。"

2

您可以使用扩展方法:

public static int ToBinary(this string binary)
{
    return Convert.ToInt32( binary, 2 );
}

然而,这是否明智就由您决定了(考虑到它将在任何字符串上操作)。

0

自 Visual Studio 2017 开始,二进制字面量(例如0b00001)得到支持。


2
这是对此现有答案的重复吗? - Pang
抱歉,但我想弄清楚新发布的VS 2017是否支持这样的用法,希望这可以帮到你。 - Xiaoyuvax
我不认为重复已经在被接受的答案中更好地解释过的内容能够帮助任何人。 - Nyerguds

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