2016-08-20 68 views
-3
int main() 
{ 
    uint32_t n1 = 00000000000000000000000000001000; 
    uint32_t n2 = 00000000000000000000000000000100; 
    cout << n2; 
} 

当我使用Visual Studio 2013(C++),我得到的结果为64为什么uint32_t的结果会自动变为八进制数?

这是为什么谈到八进制数字系统而不是二进制?

+0

你从哪里要求计算机将其解释为二进制文件?没有意识到它会是一个我能理解的八进制文字,但那么为什么你不会期望十进制呢? –

回答

2

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; 
3

这是因为与一家领先的0一些被认为是一个八进制数:

auto num = 04; //Octal number 

在C++ 14或更高版本,如果你想指定二进制数字,你将不得不使用0b前缀:

uint32_t n2 = 0b00000000000000000000000000000100; 
       ^^ 

如果您不能使用C++ 14,你将不得不使用位移位或类似的技术来获得d预期的结果。

对于十进制数字,您将有摆脱领先的0 s。

+0

请注意,二进制表示法需要C++ 14或更高版本。 –

+0

@RemyLebeau真,加:)感谢 – Rakete1111

+0

不是所有的数字,只是整数文字。 –

相关问题