1-1. コンピュータアーキテクチャ
このセクションで学ぶこと
Section titled “このセクションで学ぶこと”- コンピュータを構成する主要部品の役割
- 2進数・16進数と文字コードの仕組み
- ビット演算・シフト演算の仕組みと使いどころ
- OSがどのような役割を果たしているか
1. コンピュータの主要部品
Section titled “1. コンピュータの主要部品”コンピュータは大きく以下の部品で構成されている。
┌─────────────────────────────────────────┐│ コンピュータ ││ ││ ┌──────┐ ┌──────┐ ┌────────────┐ ││ │ CPU │──▶│メモリ│ │ストレージ │ ││ └──────┘ └──────┘ └────────────┘ ││ │ │ │ ││ └───────────┴────────────┘ ││ │ ││ バス(Bus) │└─────────────────────────────────────────┘CPU(Central Processing Unit)
Section titled “CPU(Central Processing Unit)”プログラムの命令を実際に実行する「頭脳」にあたる部品。
- 役割:計算・判断・制御
- クロック周波数:1秒間に何回クロックを刻むかを示す(例:3GHz = 30億回/秒)
- コア数:複数のコアがあると複数の処理を同時に行える(マルチコア)
CPUが行う基本動作は以下の3ステップの繰り返し。
フェッチ(Fetch) → 命令をメモリから取り出すデコード(Decode) → 命令を解読する実行(Execute) → 命令を実行するメモリ(RAM: Random Access Memory)
Section titled “メモリ(RAM: Random Access Memory)”プログラムが実行中に使うデータを一時的に保存する場所。
- 特徴:高速だが、電源を切るとデータが消える(揮発性)
- 役割:実行中のプログラムやデータを保持する
- 容量の例:8GB、16GB、32GBなど
メモリのイメージ(各マスに1バイトのデータが入る)
アドレス データ0x0000 01001000 ← 'H'0x0001 01100101 ← 'e'0x0002 01101100 ← 'l'0x0003 01101100 ← 'l'0x0004 01101111 ← 'o'ストレージ(HDD / SSD)
Section titled “ストレージ(HDD / SSD)”データを永続的に保存する場所。
| 種類 | 特徴 | 速度 |
|---|---|---|
| HDD | 磁気ディスクに記録。大容量・安価 | 遅い |
| SSD | フラッシュメモリに記録。衝撃に強い | 速い |
- 電源を切ってもデータが消えない(不揮発性)
- プログラムの実行時はストレージ → メモリへ読み込まれる
CPU レジスタ : ~0.3 ns (最速)CPU キャッシュ: ~1-10 nsメモリ(RAM) : ~100 nsSSD : ~0.1 msHDD : ~10 ms (最遅)プログラムが遅い場合、多くはメモリやディスクへのアクセスがボトルネックになっている。
2. 2進数・16進数
Section titled “2. 2進数・16進数”コンピュータは電気信号の「オン(1)」と「オフ(0)」しか扱えない。そのため、すべてのデータは 2進数(Binary) で表される。
| 10進数 | 2進数 |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 8 | 1000 |
| 15 | 1111 |
変換の考え方(10進数 → 2進数)
13 ÷ 2 = 6 余り 1 6 ÷ 2 = 3 余り 0 3 ÷ 2 = 1 余り 1 1 ÷ 2 = 0 余り 1
余りを下から読む → 1101 ✓(13 = 1101₂)データの単位
Section titled “データの単位”| 単位 | 読み方 | 大きさ |
|---|---|---|
| bit | ビット | 0か1の1桁 |
| Byte | バイト | 8 bit |
| KB | キロバイト | 1,024 Byte |
| MB | メガバイト | 1,024 KB |
| GB | ギガバイト | 1,024 MB |
| TB | テラバイト | 1,024 GB |
16進数(Hexadecimal)
Section titled “16進数(Hexadecimal)”2進数は桁数が多くなり読みにくいため、プログラミングでは 16進数 がよく使われる。
0〜9, A〜F の16種類の文字を使う(A=10, B=11, ... F=15)
2進数 : 1111 111110進数 : 25516進数 : FF (プログラムでは 0xFF と書く)| 2進数 | 16進数 | 10進数 |
|---|---|---|
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | 8 | 8 |
| 1001 | 9 | 9 |
| 1010 | A | 10 |
| 1011 | B | 11 |
| 1100 | C | 12 |
| 1101 | D | 13 |
| 1110 | E | 14 |
| 1111 | F | 15 |
なぜ16進数が便利か? 4ビット = 16進数1桁に対応するため、変換が簡単。
3. ビット演算・シフト演算
Section titled “3. ビット演算・シフト演算”2進数のビット1本1本を直接操作する演算を ビット演算 という。 CPUが直接サポートしており、非常に高速に処理できる。
ビット演算の種類
Section titled “ビット演算の種類”| 演算子 | 名前 | 意味 |
|---|---|---|
& | AND | 両方が1のときだけ1 |
| | OR | どちらか一方が1なら1 |
^ | XOR | どちらか一方だけが1なら1(排他的論理和) |
~ | NOT | 0と1を反転 |
AND(&)
Section titled “AND(&)”対応するビットが両方とも1のとき、結果が1になる。
1100 (12)& 1010 (10)---------- 1000 ( 8)使いどころ:ビットマスク(特定のビットだけ取り出す)
value = 10110111 (183)mask = 00001111 ( 15) ← 下4ビットだけ抽出したい---------結果 = 00000111 ( 7) ← 下4ビットが取れた対応するビットのどちらか一方が1なら結果が1になる。
1100 (12)| 1010 (10)---------- 1110 (14)使いどころ:特定のビットを立てる(フラグをセットする)
flags = 00000000flag_B = 00000010 ← Bビットを立てたい-------結果 = 00000010 ← Bビットが1になったXOR(^)
Section titled “XOR(^)”対応するビットが異なるときだけ1になる(同じなら0)。
1100 (12)^ 1010 (10)---------- 0110 ( 6)使いどころ:差分検出・暗号化・ビットの反転
// 同じ値でXORすると0になる → 差分がなければ0a ^ a === 0 // true// 0でXORすると元の値に戻るa ^ 0 === a // trueNOT(~)
Section titled “NOT(~)”全ビットを反転する。
8ビット幅で考えると:~00001111 → 11110000 (= 240)注意(JavaScript の場合) JavaScript では整数は32ビットとして扱われるため、
~00001111は-16になる。 NOT を使う場合はビット幅を意識して AND マスクで必要な桁だけを取り出すのが一般的。
ビット列を左または右にずらす演算。
| 演算子 | 名前 | 意味 |
|---|---|---|
<< | 左シフト | ビットを左にずらす。右端に0を補う |
>> | 右シフト | ビットを右にずらす。左端は符号ビットを補う |
左シフト(<<)
Section titled “左シフト(<<)”ビットを左に n 個ずらす = 2ⁿ 倍 と同じ効果。
00000001 (1)<< 3-----------00001000 (8) ← 1 × 2³ = 8const x = 1;x << 3; // → 8 (1 × 2³)x << 4; // → 16 (1 × 2⁴)右シフト(>>)
Section titled “右シフト(>>)”ビットを右に n 個ずらす = 2ⁿ で割る(切り捨て)と同じ効果。
00001000 (8)>> 2-----------00000010 (2) ← 8 ÷ 2² = 2const x = 20;x >> 1; // → 10 (20 ÷ 2)x >> 2; // → 5 (20 ÷ 4)なぜシフト演算を使うのか? 掛け算・割り算よりも CPU の命令数が少なく高速。 組み込みシステムやパフォーマンスが重要な処理でよく使われる。
ビット演算の実用例
Section titled “ビット演算の実用例”権限フラグ管理(ファイルのパーミッションなど)
READ = 100 (4)WRITE = 010 (2)EXECUTE = 001 (1)
// READ と WRITE を付与するpermission = READ | WRITE → 110 (6)
// WRITE 権限があるか確認するhas_write = permission & WRITE → 010 (2) → 0以外なので「あり」4. 文字コード
Section titled “4. 文字コード”コンピュータは文字も数値として扱う。「どの数値がどの文字か」を定めた規則が 文字コード。
ASCII(アスキー)
Section titled “ASCII(アスキー)”最初に普及した文字コード。128種類の文字を0〜127の数値で表す。
'A' → 65'B' → 66'a' → 97'0' → 48' ' → 32(スペース)日本語を含む世界中の文字を扱える文字コード。Webや多くのシステムで標準。
'A' → 0x41 (1バイト)'あ' → 0xE3 0x81 0x82(3バイト)'😀' → 0xF0 0x9F 0x98 0x80(4バイト)なぜ文字化けが起きるのか? 送り側と受け側で文字コードが異なる場合、「この数値はどの文字か」の解釈がずれるため文字化けが発生する。
5. OS(オペレーティングシステム)の役割
Section titled “5. OS(オペレーティングシステム)の役割”OSは、ハードウェアとアプリケーションの間に立つソフトウェア。
┌────────────────────────┐│ アプリケーション │ ← ブラウザ、エディタなど├────────────────────────┤│ OS(オペレーティング │ ← Windows、macOS、Linux│ システム) │├────────────────────────┤│ ハードウェア │ ← CPU、メモリ、ストレージ└────────────────────────┘OSの主な役割
Section titled “OSの主な役割”プロセス管理 複数のアプリを同時に動かせるよう、CPUの使用時間を切り替えながら管理する。
メモリ管理 各プログラムに必要なメモリを割り当て、互いに干渉しないよう管理する。
ファイルシステム ストレージ上のデータを「ファイル」「ディレクトリ(フォルダ)」という形で管理する。
デバイス管理 キーボード・マウス・プリンタなどの周辺機器を制御する。
セキュリティ・権限管理 ユーザーごとにアクセス権を管理し、不正なアクセスを防ぐ。
| キーワード | 説明 |
|---|---|
| CPU | 命令を実行する処理装置 |
| メモリ(RAM) | 実行中データの一時保存場所(揮発性) |
| ストレージ | データの永続保存場所(不揮発性) |
| 2進数 | コンピュータが扱う0と1の数値体系 |
| バイト | 8ビット。データ量の基本単位 |
| ビット演算(AND/OR/XOR/NOT) | ビット単位で直接操作する演算 |
| シフト演算(<< / >>) | ビットを左右にずらす演算。2の累乗の乗除と等価 |
| UTF-8 | 現在最も広く使われる文字コード |
| OS | ハードウェアとアプリの橋渡し役 |
次のステップ
Section titled “次のステップ”演習問題 に取り組んで理解を確認しよう。
理解できたら 1-2. プログラムが動く仕組み へ進もう。