分配二进制和十六进制时,“0b”和“0x”代表什么?

新手上路,请多包涵

直接分配二进制值和十六进制值时,可以按如下方式(分别):

 uint8_t val1 = 0b10101;
uint8_t val2 = 0xFF;

0b0x 是什么意思?特别是前面的0。你能用其他值代替 0 吗?

同样作为另一个奇怪的问题,还有什么其他字符可以代替 bx ?有八进制的例子吗?

原文由 rrswa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

您可以创建的任何和所有整数文字都由 [lex.icon] 上的语法生成在 C++ 标准中进行了总结

整数字面量:
    二进制字面量整数后缀opt
    八进制整数后缀opt
    十进制字面整数后缀选项
    十六进制文字整数后缀opt

二进制字面量:
    0b 二进制数
    0B 二进制数
    binary-literal '选择二进制数

八进制:
    0
    八进制文字 '选择八进制数字

十进制字面量:
    非零位
    十进制文字'选择数字

十六进制文字:
    十六进制前缀十六进制数字序列

二进制数字:
    0
    1

八进制数:之一
    0 1 2 3 4 5 6 7

非零数字:其中之一
    1 2 3 4 5 6 7 8 9

十六进制前缀:其中之一
    0x 0x

十六进制数字序列:
    十六进制数字
    hexadecimal-digit-sequence '选择十六进制数

十六进制数字:其中之一
    0 1 2 3 4 5 6 7 8 9
    abcdef
    ABCDEF

正如我们可以从语法中推断出的,有四种类型的整数文字:

  • 纯十进制,必须以非零数字开头。
  • 八进制,任何以 0 开头的数字(包括纯 0)。
  • 二进制,需要前缀 0b0B
  • 十六进制,需要前缀 0x0X

八进制数的前导 0 可以被认为是“八进制”中的“O”。其他前缀使用前导零来标记不应被解释为十进制的数字的开头。 “ B ”直观地表示“二进制”,而“ X ”表示“十进制”。

原文由 StoryTeller - Unslander Monica 发布,翻译遵循 CC BY-SA 4.0 许可协议

0b (或 0B )表示 _二进制文字_。自 C++14 起,C++ 就允许它。 (虽然一些编译器允许它作为扩展,但它还不是 C 标准的一部分。) 0x (或 0X )用于 _十六进制_。

0 可用于表示 _八进制文字_。 (有趣的是 0 本身就是一个八进制文字)。 Furthermore you use the escape sequence \ followed by digits to be read in octal: this applies only when defining const char[] literals using "" or char 或使用 '' 的多字符文字。 '\0' 在处理字符串时经常看到的表示 NUL 的符号利用了这一点。

在没有 用户定义的文字 后缀的情况下,任何以非零开头的数字文字都是拒绝的。

C++ 世界中有一些传言可以使用 0o 作为八进制文字,甚至可能放弃对前导零版本的支持。尽管这将是一个可怕的突破性变化。

原文由 Bathsheba 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题