int main()
{
uint32_t n1 = 00000000000000000000000000001000;
uint32_t n2 = 00000000000000000000000000000100;
cout << n2;
}
当我使用 Visual Studio 2013 (C++) 时,我得到的结果为 64。
为什么这转向八进制而不是二进制?
这是因为带前导的数字0
被认为是八进制数:
auto num = 04; //Octal number
在 C++14 及更高版本中,如果要指定二进制数,则必须使用0b
前缀:
uint32_t n2 = 0b00000000000000000000000000000100;
^^
如果您不能使用 C++14,则必须使用位移或类似技术来获得所需的结果。
对于十进制数,您必须去掉前导0
的 s。
以数字文字0
开头的意思是您希望将其解释为八进制,这就是我假设您使用“八进制”时的意思,这是我以前从未见过的单词,虽然它看起来是一个真实的单词,但您可能会如果你使用它会得到一些空白的凝视:-)
这种八进制处理符合标准C++11 2.14.2 Integer literals /1
:
八进制整数文字(以八为基数)以数字 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;