ITパスポート 2017年 春期 問70
問題文
機械語に関する記述のうち、適切なものはどれか。
選択肢
ア:FortranやC言語で記述されたプログラムは、機械語に変換されてから実行される。(正解)
イ:機械語は、高水準言語の一つである。
ウ:機械語は、プログラムを10進数の数字列で表現する。
エ:現在でもアプリケーションソフトの多くは、機械語を使ってプログラミングされている。
🔒 解説は解答すると表示されます
機械語に関する記述のうち、適切なものはどれか。【ITパスポート 解説】
正解の理由
正解は ア です。理由は次のとおりです。
機械語(machine language:CPUが直接実行する命令を0と1の並びで表したもの)は、FortranやC言語で書かれたプログラムが実際にCPUで動くようにするために、コンパイラ(compiler:高水準言語を機械語に翻訳するソフト)によって機械語に変換されてから実行されることが一般的だからです。コンパイルの結果、実行ファイル(機械語を含むバイナリ:binary=2進数で表現されたデータ)が生成され、これがCPUにより実行されます。
(補足)言語や実行方式によっては中間コードやインタプリタ(interpreter:命令を逐次実行する方式)を使う場合もありますが、その最終的な実行は結局CPUが理解する機械語に帰着します。
解法ステップ
- 「機械語」が何かをはっきりさせる。 → CPUが直接実行する命令で、0と1(2進数)で表現される。
- 各選択肢と機械語の定義を照らし合わせる。
- FortranやCがどのように実行されるか(コンパイルされることが多い)を思い出す。
- 矛盾する記述(「高水準言語である」「10進数で表現する」など)を順に除外する。
この手順で確認すると、正しく残るのが ア です。
選択肢別の誤答解説
-
ア: FortranやC言語で記述されたプログラムは、機械語に変換されてから実行される。
→ 正しい。Fortran/Cは伝統的にコンパイラでネイティブな機械語(実行ファイル)に変換して実行されることが多いです。 -
イ: 機械語は、高水準言語の一つである。
→ 間違い。高水準言語(high-level language:人間に近い表現で書かれる言語。例:C、Python)は機械語とは対照的です。機械語は「低水準」でCPUが直接扱う形式です。 -
ウ: 機械語は、プログラムを10進数の数字列で表現する。
→ 間違い。機械語は2進数(バイナリ)で表現されます。人間向けに読みやすくするために16進数で表現することもありますが、10進数ではありません。 -
エ: 現在でもアプリケーションソフトの多くは、機械語を使ってプログラミングされている。
→ 間違い。実際の開発では人間が扱いやすい高水準言語でプログラムを書き、コンパイラやインタプリタを使って実行します。直接機械語で手書きすることはほとんどありません(特殊な組込み系や極限の最適化ではアセンブリ言語や機械語に近い手法が使われることはあります)。
よくある誤解
-
「機械語=10進数で書く」と思う誤解
→ 実際は2進数(バイナリ)で表現されます。人間に見せるときは16進数を使うことが多いです。 -
「全部の言語は必ず機械語に変換される」と思う誤解
→ 実行方式には「コンパイル方式(機械語に変換)」と「インタプリタ方式(逐次実行)」があります。ただし、最終的にはCPUが理解する機械語で動くため、何らかの形で機械語に到達します。 -
「アセンブリと機械語は別物で関係ない」と思う誤解
→ アセンブリ言語(assembly language:機械語の命令を人間向けの短い記号で表したもの)は機械語と1対1で対応する場合が多く、機械語に非常に近い低水準言語です。
補足コラム
-
コンパイラとインタプリタの違い(簡単まとめ)
- コンパイラ:ソースコード(人が書く高水準言語)を一括で機械語に翻訳して実行ファイルを作る方式(例:C、Fortranの多くの実装)。
- インタプリタ:ソースコードを一行ずつ読み解きながらその場で実行する方式(例:古いBasicや一部のPython実装)。
- JIT(Just-In-Time:実行時に中間コードをネイティブコードに変換する技術)もあり、JavaやJavaScriptの高速化で使われます。
-
アセンブリ言語の役割
アセンブリは人間が読める名前(例:MOV、ADD)を使って機械語を記述します。通常はアセンブラというツールで機械語に翻訳されます。普段のアプリ開発ではあまり使いませんが、ハードウェア制御や性能チューニングで重要です。
FAQ
Q1: C言語は必ず機械語になるのですか?
A1: 一般にはコンパイラでネイティブな機械語に変換されますが、環境によっては中間コード(例:バイトコード)を経由する実装もあります。しかし最終的にCPUが実行するのは機械語です。
A1: 一般にはコンパイラでネイティブな機械語に変換されますが、環境によっては中間コード(例:バイトコード)を経由する実装もあります。しかし最終的にCPUが実行するのは機械語です。
Q2: 機械語とバイナリは同じ意味ですか?
A2: ほぼ同義で使えます。機械語はCPU命令の集合、バイナリはその命令を2進数で表したデータを指します。
A2: ほぼ同義で使えます。機械語はCPU命令の集合、バイナリはその命令を2進数で表したデータを指します。
Q3: スマホアプリも機械語で書かれているのですか?
A3: 開発者は高水準言語(例:Kotlin、Swift、C#)で書き、ビルド時や実行時に適切な形式(ネイティブ機械語や中間コード)に変換して動かします。直接機械語を書いて作ることは稀です。
A3: 開発者は高水準言語(例:Kotlin、Swift、C#)で書き、ビルド時や実行時に適切な形式(ネイティブ機械語や中間コード)に変換して動かします。直接機械語を書いて作ることは稀です。
関連キーワード: 機械語、マシンコード、コンパイラ、インタプリタ、アセンブリ言語、バイナリ、高水準言語、JIT、コンパイル、実行形式

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

