int main()
{
uint32_t n1 = 00000000000000000000000000001000;
uint32_t n2 = 00000000000000000000000000000100;
cout << n2;
}
当我使用Visual Studio 2013(C++),我得到的结果为64为什么uint32_t的结果会自动变为八进制数?
这是为什么谈到八进制数字系统而不是二进制?
int main()
{
uint32_t n1 = 00000000000000000000000000001000;
uint32_t n2 = 00000000000000000000000000000100;
cout << n2;
}
当我使用Visual Studio 2013(C++),我得到的结果为64为什么uint32_t的结果会自动变为八进制数?
这是为什么谈到八进制数字系统而不是二进制?
以0
开头的数字字面意味着您希望它解释为八进制,这是我假设您使用“octonary”时的含义,这是我以前从未见过的一个词,而它似乎是一个真正的词,你可能会得到一些空洞的眼神,如果你使用它:-)
这种治疗方法为八进制是按照标准,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;
经验丰富的程序员,当然,可以立即从b地图inary诅咒所以很可能只使用:
uint32_t n1 = 0x00000008;
uint32_t n2 = 0x00000004;
这是因为与一家领先的0
一些被认为是一个八进制数:
auto num = 04; //Octal number
在C++ 14或更高版本,如果你想指定二进制数字,你将不得不使用0b
前缀:
uint32_t n2 = 0b00000000000000000000000000000100;
^^
如果您不能使用C++ 14,你将不得不使用位移位或类似的技术来获得d预期的结果。
对于十进制数字,您将有有摆脱领先的0
s。
你从哪里要求计算机将其解释为二进制文件?没有意识到它会是一个我能理解的八进制文字,但那么为什么你不会期望十进制呢? –