直接分配二进制值和十六进制值时,可以按如下方式(分别):
uint8_t val1 = 0b10101;
uint8_t val2 = 0xFF;
0b
和 0x
是什么意思?特别是前面的0。你能用其他值代替 0
吗?
同样作为另一个奇怪的问题,还有什么其他字符可以代替 b
和 x
?有八进制的例子吗?
原文由 rrswa 发布,翻译遵循 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 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您可以创建的任何和所有整数文字都由 [lex.icon] 上的语法生成在 C++ 标准中进行了总结
正如我们可以从语法中推断出的,有四种类型的整数文字:
0b
或0B
。0x
或0X
。八进制数的前导 0 可以被认为是“八进制”中的“O”。其他前缀使用前导零来标记不应被解释为十进制的数字的开头。 “ B ”直观地表示“二进制”,而“ X ”表示“十进制”。