• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:unsigned型のビット構成を表示するプログラムが理解できません。)

unsigned型ビット構成の表示プログラムについての理解

このQ&Aのポイント
  • unsigned型のビット構成を表示するプログラムについて、10や18を入力した場合の動作が理解できない。
  • プログラムの処理は以下のようになる。まず、入力された値をunsigned型の変数に格納し、count_bits関数を呼び出す。
  • count_bits関数では、入力された値を1ビットずつ右シフトしながら、最下位ビットと1を論理比較し、1ならばカウントを増やす。最後にカウントを返す。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

count_bits の処理で, なんで x=10 なの? 関数間の呼出関係を絵で描いてみてごらん.

hikarin07
質問者

補足

図書いて位置から考えなおして見ました。 count_bits(unsigned x)に受け渡されているのはcount_bits(~0U)から~0Uで int count_bits(unsigned x) { int count=0; while(x){ if(x&1U)count++; x>>=1; } return(count); } ここの処理は int count=0; while(~0U){ if(~0U&1U)count++; x>>=1; } 私の処理系ではcount=32となって、int int_bits(void)で、32をint_bits()に返す。 右シフトを31から0までの表示を行っているんでしょうか?

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

そうです. int_bits() で int のビット数を調べて, そのあとで上位から順に各ビットが 0 か 1 かを表示しているだけです.

関連するQ&A