C++ 为什么uint32的结果会自动变成八进制数? intmain() { uint32_t n1=0000000000000000000000 1000; uint32_t n2=000000000000000000000000100; cout
以C++ 为什么uint32的结果会自动变成八进制数? intmain() { uint32_t n1=0000000000000000000000 1000; uint32_t n2=000000000000000000000000100; cout,c++,uint32-t,C++,Uint32 T,以0开头的数字文字表示您希望将其解释为八进制,这就是我假设您使用“八进制”时的意思,这是一个我以前从未见过的单词,虽然它看起来是一个真实的单词,但如果您使用它,您可能会得到一些空白的凝视:-) 此八进制处理符合标准,C++11 2.14.2整数文本/1: 八进制整数文字(以8为基数)以数字0开头,由一系列八进制数字组成 对于二进制数,最简单的方法可能是位移位(C++14之前): 当然,经验丰富的程序员可以立即从二进制映射到十六进制,因此可能只需使用: uint32_t n1 = 0b000000
0
开头的数字文字表示您希望将其解释为八进制,这就是我假设您使用“八进制”时的意思,这是一个我以前从未见过的单词,虽然它看起来是一个真实的单词,但如果您使用它,您可能会得到一些空白的凝视:-)
此八进制处理符合标准,C++11 2.14.2整数文本/1
:
八进制整数文字(以8为基数)以数字0开头,由一系列八进制数字组成
对于二进制数,最简单的方法可能是位移位(C++14之前):
当然,经验丰富的程序员可以立即从二进制映射到十六进制,因此可能只需使用:
uint32_t n1 = 0b00000000000000000000000000001000;
uint32_t n2 = 0b00000000000000000000000000000100;
这是因为前导
0
的数字被认为是八进制数:
uint32_t n1 = 0x00000008;
uint32_t n2 = 0x00000004;
在C++14及更高版本中,如果要指定二进制数,必须使用0b
前缀:
auto num = 04; //Octal number
如果不能使用C++14,则必须使用位移位或类似的技术来获得所需的结果
对于十进制数,您必须去掉前导的
0
s.注意,二进制表示法需要C++14或更高版本。@RemyLebeau True,补充道:)感谢不是所有的数字,只是整数文本。您在哪里要求计算机将其解释为二进制?我没有意识到这是一个我能理解的八进制文本,但为什么你不期望十进制吗?
uint32_t n1 = 0x00000008;
uint32_t n2 = 0x00000004;
auto num = 04; //Octal number
uint32_t n2 = 0b00000000000000000000000000000100;
^^