C言語の基礎

C言語の規格で、int型の大きさについて定められていることとして、正しいものはどれか。

  1. Aどの処理系でも32ビットと決められている
  2. B少なくとも16ビットあることだけが決められ、実際の大きさは処理系が決める
  3. CCPUの番地(アドレス)の幅と同じと決められ、64ビットのCPUでは64ビットになる
答えと解説を見る

正解:B. 少なくとも16ビットあることだけが決められ、実際の大きさは処理系が決める

C言語の規格は、intが少なくとも −32767〜32767 を表せること(つまり16ビット以上)だけを求め、実際の大きさは処理系(コンパイラと対象のCPUの組み合わせ)が決めます。16ビットのマイコン向けのコンパイラではintが16ビットのことがあり、多くのPCや32ビットのマイコンでは32ビットです。64ビットのLinuxやWindowsでもintは一般に32ビットのままで、ポインタが64ビットになります。決まった大きさの整数が必要なときは、stdint.h の int32_t などを使います。

  • A. 32ビットは多くの環境での大きさですが、規格の決まりではありません。16ビットのintを使う処理系もあります。
  • B. 正しい。規格は表せる範囲の下限だけを定め、実際の大きさは処理系が決めます。
  • C. 64ビットのLinuxやWindowsでも、intは一般に32ビットです。
この分野を解く 分野ページへ

C言語の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

C言語の基礎のほかの問題

  1. 組込みのプログラムで、32ビットの周辺レジスタの値を入れる変数を、unsigned int ではなく stdint.h の uint32_t で宣言することが多い。主な理由として正しいものはどれか。
  2. 整数どうしの割り算を含む上のコードを実行したときの出力として、正しいものはどれか。
  3. 前置と後置の ++ を使った上のコードを実行したときの出力として、正しいものはどれか。
  4. if 文の条件に = を書いた上のコードを実行したときの出力として、正しいものはどれか。
  5. レジスタの値 reg のビット2が1かどうかを調べるつもりで、上のコードを書いた。実行したときの結果として、正しいものはどれか。