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

Rua*_*uan 3 c++ binary hex

直接分配二进制值和十六进制值时,可以分别执行以下操作:

uint8_t val1 = 0b10101;
uint8_t val2 = 0xFF;
Run Code Online (Sandbox Code Playgroud)

什么是0b0x是什么意思?特别是前面的0。您可以使用其他值代替0吗?

另外一个有趣的问题是,在“ b”和“ x”的地方还有哪些其他字符?以八进制为例吗?

Sto*_*ica 6

在C ++标准中,[lex.icon]上的语法生成总结了您可以创建的所有整数文字。

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

二进制字面量:
    0b二进制数字
    0B二进制数字
    二进制字面量' 选择二进制数位

八进制字面量:
    0
    八进制字面' 选择八进制数字

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

十六进制字面量:
    十六进制前缀十六进制数字序列

二进制数字:
    0
    1个

八位数字:
    0 1 2 3 4 5 6 7

非零数字:
    1 2 3 4 5 6 7 8 9

十六进制前缀:
    0x 0X

十六进制数字序列:
    十六进制数字
    十六进制数字序列“ 选择十六进制数字

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

我们可以从语法中得出,整数文字有四种类型:

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

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

  • @Bathsheba-''\ 123'`并非严格有效。一个只能具有八进制和十六进制转义序列。另外,由于当前的问题是整数文字,因此我个人认为将字符文字纳入范围可能会造成混淆。一个答案中有两个惊人的语法产物对我来说太过分了。 (2认同)
  • @DawnSong - 从语音上来说,X 比 H 更突出。另外,o 似乎是多余的。在某些行话中,o 和 0 可以互换使用。例如,“08:00”可能被称为“哦第八小时”。 (2认同)