【问题标题】:Integer literals in any base in C++?C ++中任何基数的整数文字?
【发布时间】:2014-12-09 11:38:29
【问题描述】:

在 C++ 中,可以指定十进制整数:int x = 158、八进制整数:int x = 0236 和十六进制整数:int x = 0x9e。在任何基础中定义ints 的最简单方法是什么,例如二进制,基数 3,基数 9,什么?是否有像b101110 这样的标准前缀,还是过程更复杂?

谢谢。

【问题讨论】:

  • 我认为如果你想用另一个基础定义ìnt,你必须为此编写一个特定的函数(或创建一个新的数据类型......)
  • 带有 0b 前缀的二进制文字被添加到 C++14 的标准中。
  • 正如@Michael 所说,C++14 中有0b;除此之外,您永远需要的只是十进制和十六进制(如果您正在处理 UNIX 权限,可能可能八进制)。跨度>
  • @Michael 尚未广泛使用,也没有解决他的问题(例如 base 3、base 9 等)。 (并且没有某种分隔符的二进制文字在很大程度上是不可用的。)
  • @Griwes 实际上,八进制的使用非常广泛。给定语法,不能用十进制表示 0,它必须是 "0"(八进制)或 "0x0"(十进制)。

标签: c++ base radix


【解决方案1】:

在 C++14 中添加了二进制文字 (0b01010110101)。

不支持其他基础,但可以使用用户定义文字和 constexpr 的模板化原始形式来模拟它们。 Andrzej Krzemienski 在这里描述它:https://akrzemi1.wordpress.com/2012/10/23/user-defined-literals-part-ii/

【讨论】:

    【解决方案2】:

    首先:您的示例没有分配,而是初始化。其次,将表达式分配给int(或者使用表达式对其进行初始化)。最后,整型文字(仅在表达式中合法)只能用十进制、八进制或十六进制表示; C 语言家族不支持其他任何东西。

    【讨论】:

    • 略有错误;现在在 C++ 中有 0b(并且通过扩展支持了很长一段时间)。
    • @Griwes 真的。自从 C++11 被采用以来,我就没有在标准委员会中活跃过,所以我并不总是最新的。我看到他们还允许在其中使用分隔符;否则实际上将毫无用处。 (IIRC,g++ 已经支持它很长时间了。但是,IIRC,g++ 再次允许 $ 在其中(以及在其他一些地方)。)
    猜你喜欢
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多