2016-08-20 134 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

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

相關問題