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
:
八进制整数字面值(以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;