二进制表示法用于编写比特 - C#

5

在C#中,有一些表示数字类型的符号,可以指示你所写的是浮点数、双精度数、整数等等。

那么,我想写一个二进制数字,该怎么做呢?

比如说,我有一个字节:

byte Number = 10011000 //(8 bits)

如何在不知道二进制的10011000等于十进制的152的情况下编写它呢?

注:解析字符串完全不是问题(我需要性能)。


byte Number = 152; // 10011000有什么问题吗?十六进制,即0x98,也应该可以使用,并且更容易计算。 - Bernhard Barker
...或者在处理十六进制数值时,像这样:byte Number = 0x98; // 10011000 - Lars Kristensen
请看此链接:https://dev59.com/83RB5IYBdhLWcg3wiHr7#594725 - ispiro
3个回答

15

从c# 6更正为c# 7,你可以使用0b前缀获取二进制数,类似于用0x获取十六进制数。

int x           = 0b1010000; //binary value of 80
int seventyFive = 0b1001011; //binary value of 75

试试看


1
原计划用于 C# 6,但并未包含在该版本中。它是在 C# 7 中添加的。这意味着您至少需要使用 Visual Studio 2017。 - Tobias Knauss

6

你可以写这个:

int binaryNotation = 0b_1001_1000;

在C# 7.0及更高版本中,您可以使用下划线“_”作为数字分隔符,包括十进制、二进制或十六进制表示法,以提高可读性。

4

恐怕除了解析字符串,没有其他方法可以做到这一点:

byte number = (byte) Convert.ToInt32("10011000", 2);

很遗憾,您无法像那样分配常量值。

如果您经常这样做,我想您可以编写一个字符串扩展方法,使其更易读:

public static class StringExt
{
    public static byte AsByte(this string self)
    {
        return (byte)Convert.ToInt32(self, 2);
    }
}

然后代码将会是这样的:
byte number = "10011000".AsByte();

我不确定这是否是一个好主意...

个人而言,我只使用十六进制初始化器,例如:

byte number = 0x98;

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