2017-08-02 3 views
-3

このコードは12480を出力します。なぜですか?私はそれが124816を印刷すると予想しました。誰かがそれを私に説明できましたか?誰かがこのコードを私に説明してもらえますか?なぜ私は16の代わりに0を得るのですか?

int main() 
    { 
     char c = 48; // From ASCII one can find that char 48 represents 0. 
     int i , mask = 1; 
     for(i = 1; i <= 5; i++) 
      { 
       printf("%c", c|mask); // Here print the char formatted output 
       mask = mask << 1; 
      } 
     return 0; 
    } 
+1

*なぜ124816が印刷されるのですか? (この質問を、ループを通ってほんの5回目の非常に単純な状況に再調整することもできます。これは、あなたが期待していないものを見ているところです...) –

+0

はい。 5回目だけでなくforループをfor(i = 1; i <= 6; i ++)に変更すると、同じ出力が得られます。 – hago

答えて

0

あなたはcharとして変数を印刷している、あなたはそれのうち(文字である)16を得ることはありません。 1とあなたbitwise-orそれはあなたがcharにASCIIから翻訳されたときの文字1に等しくなる110001 = 49を得るあなたが持っている48 = 110000

、。

次回はです。これは2です。

これは、110000 | 10000 = 110000 = 480の場合、5回目の繰り返しに達するまで続きます。

+0

ありがとうございます。私は間違いを理解しました。私は0でORを行っていましたが、私は48のバイナリバージョンでそれをしていたはずです。 – hago

+0

@hagoその後、問題が解決したら、回答を受け入れたものとしてマークしてください。 – m0h4mm4d

+0

はい。私は今それをやった。おそらくこれを初めて使う。 – hago

関連する問題