int main()
{
uint32_t n1 = 00000000000000000000000000001000;
uint32_t n2 = 00000000000000000000000000000100;
cout << n2;
}
当我使用Visual Studio 2013(C ++)时,我得到64的结果。
为什么这转向八进制数而不是二进制数?
答案 0 :(得分:3)
那是因为带有前导0
的数字被认为是八进制数字:
auto num = 04; //Octal number
在C ++ 14及更高版本中,如果要指定二进制数,则必须使用0b
前缀:
uint32_t n2 = 0b00000000000000000000000000000100;
^^
如果您不能使用C ++ 14,则必须使用位移或类似技术来获得所需的结果。
对于十进制数字,您将 以摆脱前导0
。
答案 1 :(得分:2)
用0
开始一个数字文字意味着你希望它被解释为八进制,这就是我所说的当你使用&#34; octonary&#34;时所说的一个词,这是我以前见过的一个词而且,虽然它似乎是一个真实的词,但如果你使用它,你可能会得到一些空白的注意: - )
这种八元组的处理符合标准,C++11 2.14.2 Integer literals /1
:
八进制整数文字(基数为8)以数字0开头,由一系列八进制数字组成。
对于二进制数,可能最简单的方法是使用位移(前C ++ 14):
uint32_t n1 = 1u << 3;
uint32_t n2 = 1u << 2;
C ++ 14提供0b
前缀,类似于0x
十六进制数字的前缀,但我并不完全相信,如果你的话,其他选项可读仍然使用大量前导零:
uint32_t n1 = 0b00000000000000000000000000001000;
uint32_t n2 = 0b00000000000000000000000000000100;
当然,经验丰富的程序员可以立即从二进制映射到十六进制,所以可能会使用:
uint32_t n1 = 0x00000008;
uint32_t n2 = 0x00000004;