位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 字面值 二进制字面值与数字分隔符

提问人:刘团圆发布时间:2020-11-12

无论编程语法有多复杂,计算机都只能以两种状态——0和1来工作,这就是人们所熟知的二进制(基数为 2)。如果愿意,可以将所有的程序都编码为由1和0组成的序列,之后再运行程序。虽然这种方式既不实用也 不值得推荐,但这样做可以将减轻解释器的负担,让解释器不用再从C#、十进制(基数为10)、八进制(基数为 8)或十六进制(基数为16)等对程序进行转换。这样做并没有多大好处,所以必须认识到只有在非常特殊的情况 下才会用到二进制表示法。例如,可能需要以二进制、十六进制或ASCII码的形式将一些值传递给第三方的代 码包。大部分情况下,除非确实需要二进制字面值,否则还是应该使用C#等编程语言来编写代码。

深入理解了有关半字节、位、字节、字符、字、二进制、八进制、十六进制等字面值的技术知识和历史背 景,才能够深入理解何时、在什么地方、如何以及为什么使用这些字面值。我们不会深入探讨“为什么使用” 这个历史问题,也不会深入探讨“如何使用”这个专业问题。现在明白下面这样的问题就己经足够,例如,可 以将二进制字面值作为一种优雅方法,在进行模式匹配和比较时将值存储为常量,还可以用来实现位掩码。如 下面代码行中对二进制和十六进制所做的对比所示,可以发现,二进制数字从右往左循环移动一位。十六进制 值不存在模式,所以很难快速确定代码的意图。

int[] binaryPhases = [ ObOOllOOOl, ObOllOOOlO, ObllOOOlOO, OblOOOlOOl ];

int[] hexPhases = [ 0x31, 0x62/ 0xC4, 0x89 ];

为了更好地理解C# 7的二进制字面值,以下面的代码为例:

int[] numbers = [ lf 2, 4, 8, 16 ];

在C#7中,可以直接以二进制的形式向numbers数组添加值,如下所示:

int[] numbers = [ ObOOOl, ObOOlO, ObOOlOO, ObOOOlOOO, ObOOOlOOOO ];

正如十六进制值以前缀OX表示,编译器会将以Ob开头的任何值都识别为二进制值,并按照二进制值进行 处理。能够想到,较大数的二进制值会非常长,当手动输入时特别容易犯错。例如数字128的二进制值为 10000000——即1后面要跟7个0。对于这种情况,C#7中的新特性数字分隔符就可以派上用场。例如,下面 的代码:

int(] numbers = [ 32, 64, 128 ];

int[] numbers = [ ObOOlO一0000, 0b0100_0000f 0bl000_0000 ];

可以看出,将二进制字面值分隔成数字组有助于増强代码的可读性,便于代码的管理。数字分隔符不只适 用于二进制值,也可以用于十进制、浮点数和双精度数。下面的代码在表示Pi的值时,每三位使用了一个分隔 符。使用数字分隔符的主要目的就是使代码更易读。

public const double Pi = 3.141_592_653_589_793_238_462_643_383_279_502;

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部