【问题标题】:Why does the new feature "binary literals" start with 0b instead of being suffixed?为什么新功能“二进制文字”以 0b 开头而不是后缀?
【发布时间】:2014-04-23 12:02:21
【问题描述】:

下一个 C# 版本计划(2014 年 4 月)使用二进制文字,如您在 Language Features Status of Roslyn project 中所见。

该页面中的示例是这样的:

0b00000100

所以你可能会这样使用:

var myBynaryLiteral = 0b00000100;

我想了解他们为什么选择在此前缀上加上0b,而不是像doublefloatdecimal 等那样在末尾使用一个字母。

double a = 1d;
float b = 1f;
decimal c = 1m;

【问题讨论】:

  • 后缀与类型有关(fm),前缀与基数有关(0b0x)。
  • 你能解释更多@FrédéricHamidi吗?从未使用过十六进制文字,但看起来就像您所说的 0x。这是一个坚实的观点。
  • @Vitor:八进制是以 8 为底,十六进制是以 16 为底。(八进制曾经相当普遍,但现在你看不到太多了。)在十六进制中,你使用数字 0-9, A 代表 10,B 代表 11,依此类推,直到 F 代表 15。十六进制的优点是一个字节可以用两位数表示(半字节或“nybble”由一位数表示)。例如,0x770111 0111(或 0b01110111)。

标签: c# roslyn c#-6.0


【解决方案1】:

整数字面量具有两个不同的属性:它们的类型,可以用LUL 等后缀指定,以及它们的基数(documentation 中称为“形式”),可以用前缀指定,例如0x 现在是 0b

指定类型总是通过后缀完成,而指定基数总是通过前缀完成,因此保持相同的约定是有意义的。此外,您可以组合这两个说明符。

例如:

0b00101010UL

将表示文字 42,存储为无符号长整数,并以基数 2 表示。

【讨论】:

  • 当表示一个以整数值开始的浮点数时,这将如何工作,即 float val = 0x0FF0f; - 发现问题? - 大概 Roslyn 不会允许浮点数表示为十六进制?
  • @series0ne,这不仅仅是 Roslyn,没有任何版本的 C# 允许您将 0x 前缀与整数文字以外的东西一起使用。你一开始就不能将它应用于浮动文字。
猜你喜欢
  • 2020-07-23
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
  • 2017-12-12
  • 2020-09-25
  • 2010-09-25
相关资源
最近更新 更多