• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:10進数を2進数にするプログラムについて)

10進数を2進数に変換するプログラムについての質問

このQ&Aのポイント
  • 質問文章では、10進数を2進数に変換するプログラムについての質問がされています。
  • 具体的には、計算結果がどのように格納され、0x00000001という値の意味、シフト演算子の意味、括弧内の意味についての疑問があります。
  • また、nの制限についても質問者は調査を求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • tekebon
  • ベストアンサー率62% (36/58)
回答No.1

プログラムの前提条件としてint b[32]となっているとします。 またnには11が格納されているとします。 1-3. n & 0x00000001 は両辺のビットの論理積をとります。 つまり「最後のビットは1かどうか」を計算しb[i]に最後のビットが1なら1が、 0なら0が格納されていきます。 今回はn=11ですから二進数で表すと1011ですからb[0]に1が格納されます。 これで最後のビットが確認できたのでn>>=1を計算しnを右へ1ビットずらします。 ですから二進数でn=101となります。 これを繰り返すので配列には順に{1,1,0,1,0,....0}と格納されます。 このときiは32でfor文を抜けています。 配列の後ろから表示させれば二進数のデータが表示されますが、先頭に 無駄な0がたくさん並んでしまいます。 そこで2番目のdo-whileでカウントダウンしながらデータの頭だしをしているわけです。 4. ですからこの条件はカウントダウン中にb[i]が0でなくかつiが正である間という条件で データのはじめに来る1をさがしています。 次のwhile文ですが、おそらくprintfの次にi--;が あるのではないでしょうか?(無限ループになっています) 5.最後のprintfのなかは「\n\n」で単に2行改行しているだけかと思います。

naggy_v
質問者

お礼

非常に丁寧なご回答ありがとうございます。 今までfortranしかさわったことないのでこのビット演算子とかは抵抗がありすぎ、なかなか理解できませんでしたがすごくよくわかりました。 ありがとうございました。

関連するQ&A