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

私は、Visual Studio 2013(C++)、私は64なぜuint32_tの結果は自動的に8進数になりますか?

として結果を取得していますを使用する理由である進数システムの代わりに、バイナリへのこの転換?

+0

コンピュータにバイナリとして解釈させるよう依頼しましたか?私は理解できる8進数のリテラルであることに気づいていませんが、代わりになぜ10進数を期待しませんか? –

答えて

2

0で数値リテラルを開始すると、これは8進数として解釈されることを意味します。これは、「8分法」を使用したときの意味であり、実際の単語あなたは

進としてこの治療法が標準どおりです:-)それを使用する場合、あなたはおそらく、C++11 2.14.2 Integer literals /1をいくつかの空白の視線を取得します:

進整数リテラル(基本8)が数字で始まる

0であり、8進数字のシーケンスで構成されています。おそらく最も簡単な方法は、(事前にC++ 14)ビットシフトである二進数について

uint32_t n1 = 1u << 3; 
uint32_t n2 = 1u << 2; 

C++ 14 0xものと類似し、0bプレフィックスを提供16進数のために私はあなたがまだ先行ゼロが多数使用する場合それは、他の選択肢のように読めるのです完全に確信していない:

uint32_t n1 = 0b00000000000000000000000000001000; 
uint32_t n2 = 0b00000000000000000000000000000100; 

味付けコーダーを、当然のことながら、瞬時にBからマッピングすることができますinaryは、おそらく使用することになりそうHexに:

有力 0と数8進数であると考えられているためだ
uint32_t n1 = 0x00000008; 
uint32_t n2 = 0x00000004; 
3

auto num = 04; //Octal number 

C++ 14以降では、あなたがしたい場合は、あなたがC++ 14を使用することができない場合は、Dを取得するためにビットシフトまたは同様の技術を使用する必要があります

uint32_t n2 = 0b00000000000000000000000000000100; 
       ^^ 

:進数を指定するには、0b接頭辞を使用する必要があります欲望の結果。

10進数の場合は、0を取り除くためにを持つがあります。

+0

バイナリ表記にはC++ 14以降が必要です。 –

+0

@RemyLebeau True、added :)ありがとう – Rakete1111

+0

すべての数値ではなく、整数リテラルです。 –

関連する問題