🐧 Penguin Language Plus
/ 基本情報 まとめ
💻 基本情報技術者 まとめ
公式集・全体マップ・疑似言語コード・よく出る暗記ポイント
📐 公式集
🗺 全体マップ
💻 疑似言語
📌 よく出る
数値表現・変換
2進数 → 10進数
Σ (各桁 × 2ⁿ)
右から0桁目として、各ビットに2のn乗をかけて合計する
1011₂ = 1×8 + 0×4 + 1×2 + 1×1 = 11
16進数 ↔ 2進数
4ビット = 1桁(16進)
16進1桁を4ビットで表現。A=1010, B=1011, …, F=1111
3A₁₆ = 0011 1010₂
2の補数(負の数)
ビット反転 + 1
符号付き整数で負の数を表現する方法。最上位ビットが符号ビット(1=負)
00000011₂(+3) → 11111100+1 = 11111101₂(-3)
nビットの表現範囲
符号なし: 0 〜 2ⁿ-1
符号あり: -2ⁿ⁻¹ 〜 2ⁿ⁻¹-1
8ビット符号なし: 0〜255、符号あり: -128〜127
論理演算
基本演算
AND: A·B OR: A+B
NOT: Ā XOR: A⊕B
XOR = 同じ→0、違う→1(排他的論理和)
1 XOR 1=0 1 XOR 0=1
ド・モルガンの法則
NOT(A AND B) = (NOT A) OR (NOT B)
NOT(A OR B) = (NOT A) AND (NOT B)
NANDゲート・NORゲートの変換に使う
シフト演算
左シフト n: × 2ⁿ
右シフト n: ÷ 2ⁿ
算術右シフト: 符号ビットを保持。論理右シフト: 0埋め
0101 左1 → 1010(5→10)
CPU・処理性能
MIPS(処理速度)
MIPS = 命令数 / (実行時間 × 10⁶)
1秒あたり何百万命令実行できるか。クロック周波数 / CPI でも求まる
1GHz, CPI=2 → MIPS=1000/2=500
CPI(命令あたりクロック)
CPI = クロック数 / 命令数
実行時間 = 命令数×CPI / クロック周波数
CPIが小さいほど高速。パイプライン化で削減できる
キャッシュ実効アクセス時間
h×Tc + (1-h)×Tm
h=ヒット率、Tc=キャッシュ時間、Tm=主記憶時間
h=0.9, Tc=10ns, Tm=100ns → 0.9×10+0.1×100=19ns
スループット
スループット = 処理件数 / 時間
単位時間あたりの処理量。ターンアラウンドタイムは1件完了までの時間
信頼性・稼働率
稼働率
稼働率 = MTBF / (MTBF + MTTR)
MTBF: 平均故障間隔、MTTR: 平均修復時間。値は0〜1
MTBF=90h, MTTR=10h → 90/100=0.9
直列システム稼働率
R = R₁ × R₂
AとBが直列(両方動かないと動かない)→ 積算。全体は単体より低くなる
0.9 × 0.9 = 0.81
並列システム稼働率
R = 1 - (1-R₁)(1-R₂)
AまたはBどちらかが動けばよい→ 冗長化。全体は単体より高くなる
1-(0.1×0.1) = 0.99
ネットワーク
転送時間
転送時間 = データ量 / 帯域幅
単位を揃えること(bit/B変換注意)。伝搬遅延は別途加算
1MB / 10Mbps = 8×10⁶ / 10⁷ = 0.8秒
IPアドレス/サブネット
ホスト数 = 2^(32-プレフィクス長) - 2
-2はネットワークアドレスとブロードキャストアドレスを除くため
/24 → 2^8-2 = 254ホスト
クラスとポート番号
HTTP:80 HTTPS:443
FTP:21 SSH:22 SMTP:25
DNS:53 POP3:110
ウェルノウンポート(0-1023)は暗記必須
確率・情報量
加法定理
P(A∪B) = P(A) + P(B) - P(A∩B)
排反(互いに起こらない)なら P(A∩B)=0 なので P(A)+P(B)
乗法定理・条件付き確率
P(A∩B) = P(A) × P(B|A)
独立なら P(B|A)=P(B)。ベイズの定理と組み合わせて出る
情報量・エントロピー
情報量: I = -log₂(p)
エントロピー: H = -Σp·log₂(p)
確率が低いほど情報量が大きい。エントロピーは不確かさの指標
p=1/8 → I = -log₂(1/8) = 3bit
組み合わせ・順列
C(n,r) = n! / (r!(n-r)!)
P(n,r) = n! / (n-r)!
組み合わせ: 順序なし。順列: 順序あり
C(5,2) = 5×4 / 2×1 = 10
データ構造・計算量
計算量 O記法
O(1) < O(log n) < O(n) < O(n log n) < O(n²)
バブルソート: O(n²)、マージ/クイックソート平均: O(n log n)、二分探索: O(log n)
スタック・キュー
スタック: LIFO(後入れ先出し)
キュー: FIFO(先入れ先出し)
スタック: 関数呼び出し・戻りアドレスの管理。キュー: プリンタスプール等
木の基本
高さh の2分木の最大ノード数: 2^(h+1) - 1
完全2分木のノード数n → 高さ h ≈ log₂(n+1)-1
★=頻出、◎=重要、○=標準。科目Aは選択式、科目Bは疑似言語(プログラミング)とセキュリティ。
📐 テクノロジ系 — 基礎理論
★ 2進数・16進数・補数表現
★ 論理演算(AND/OR/XOR/NOT)
★ 論理回路(半加算器・フリップフロップ)
◎ 集合・確率・統計
◎ 情報量・エントロピー
○ グラフ・木構造
💻 テクノロジ系 — コンピュータ構成
★ MIPS・CPI・クロック周波数
★ キャッシュメモリ・ヒット率
★ パイプライン処理
◎ 割り込み処理
◎ メモリ種類(DRAM/SRAM/ROM)
○ DMA・バス構成
🗂 テクノロジ系 — ソフトウェア
★ ソートアルゴリズム(計算量比較)
★ 探索(線形・二分・ハッシュ)
★ スタック・キュー・木・グラフ
◎ OS: プロセス管理・スケジューリング
◎ メモリ管理・仮想記憶・ページング
○ ファイルシステム
🌐 テクノロジ系 — ネットワーク
★ OSI参照モデル(7層)
★ TCP/IP(IP・TCP・UDP)
★ IPアドレス・サブネットマスク
◎ ポート番号(HTTP/HTTPS/FTP…)
◎ DNS・DHCP・NAT
○ 無線LAN(IEEE 802.11)
🔒 テクノロジ系 — セキュリティ
★ 暗号化(共通鍵・公開鍵・ハイブリッド)
★ デジタル署名・PKI・証明書
★ 脅威(XSS/SQLi/フィッシング/DoS)
◎ ファイアウォール・IDS/IPS・WAF
◎ 認証方式(多要素・シングルサインオン)
○ ISMS・個人情報保護法
🗃 テクノロジ系 — データベース
★ SQL(SELECT/JOIN/GROUP BY)
★ 正規化(第1〜第3正規形)
◎ トランザクション・ACID特性
◎ E-R図・関係モデル
○ インデックス・ビュー
📋 マネジメント系
★ プロジェクト管理(WBS・ガントチャート・PERT図)
◎ クリティカルパス
◎ コスト管理・品質管理
○ PMBOK・リスク管理
○ サービスマネジメント(ITIL)
📊 ストラテジ系
◎ 経営戦略(SWOT/BSC/PPM)
◎ システム開発手法(ウォーターフォール/アジャイル)
○ BPR・SCM・ERP・CRM
○ 財務諸表・ROI・IRR
○ 知的財産権・労働関連法
📌 科目B(疑似言語)の出題範囲
科目B:プログラム系16問 + セキュリティ4問(全20問)
疑似言語:配列操作・文字列処理・再帰・スタック・キュー・木操作・ソート・探索が頻出。
セキュリティ:脅威の種類・対策・インシデント対応などが出る。
科目Bで使われる疑似言語の基本構文。変数宣言・制御構文・関数の書き方を押さえておこう。
📋 基本構文まとめ(変数・制御・配列)
/* 変数宣言 */
整数型
: n ←
0
// ← で代入
整数型の配列
: data[
5
] ←
3
,
1
,
4
,
1
,
5
/* if文 */
もし
n >
0
ならば
n ← n -
1
そうでなければ
n ←
0
を実行する
/* for文 */
i
を
1
から
5
まで
1
ずつ増やしながら data[i] の処理
を繰り返す
/* while文 */
n > 0 の間
n ← n -
1
を繰り返す
添字は 1 始まりの場合が多い。問題文の説明をよく確認すること。
🔄 バブルソート(O(n²))
整数型の配列
: a[n]
整数型
: i, j, tmp
i
を
1
から n-
1
まで
1
ずつ増やしながら
j
を
1
から n-i まで
1
ずつ増やしながら
もし
a[j] > a[j+
1
]
ならば
tmp ← a[j] a[j] ← a[j+
1
] a[j+
1
] ← tmp
を実行する
を繰り返す
を繰り返す
隣どうしを比較して大きい方を後ろへ。1パスで最大値が末尾に確定する。
🔍 線形探索(O(n))
整数型の配列
: a[n]
整数型
: target, i, result result ← -
1
// 見つからなかった場合の初期値
i
を
1
から n まで
1
ずつ増やしながら
もし
a[i] = target
ならば
result ← i
ループを抜ける
// break に相当
を実行する
を繰り返す
🔍 二分探索(O(log n))— ソート済み配列が前提
整数型の配列
: a[n]
// ソート済み
整数型
: target, left, right, mid left ←
1
; right ← n
left ≦ right の間
mid ← (left + right) ÷
2
もし
a[mid] = target
ならば
mid を返す
そうでなく、もし
a[mid] < target
ならば
left ← mid +
1
そうでなければ
right ← mid -
1
を実行する
を繰り返す
-1 を返す
// 見つからない
毎回探索範囲が半分になるので O(log n)。n=1000 なら最大10回で見つかる。
♻️ 再帰(階乗 n!)
整数型関数
factorial(整数型: n)
もし
n ≦
1
ならば
1 を返す
を実行する
n × factorial(n-
1
) を返す
/* 呼び出し例 */
整数型
: result ← factorial(
5
)
// 120
基底条件(n≦1で1を返す)がないと無限ループ。再帰の深さがスタックを消費する。
📚 スタック操作(LIFO)
整数型の配列
: stack[MAX]
整数型
: top ←
0
// スタックポインタ
/* push: 値を積む */
整数型手続き
push(整数型: val) top ← top +
1
stack[top] ← val
/* pop: 値を取り出す */
整数型関数
pop()
整数型
: val ← stack[top] top ← top -
1
val を返す
🌲 2分木の中順走査(左→根→右)
手続き
inorder(ノード: node)
もし
node が null
ならば
戻る
を実行する
inorder(node.left)
// 左の子
node.value を表示
// 根(自分)
inorder(node.right)
// 右の子
/* 前順: 根→左→右(preorder)
後順: 左→右→根(postorder)*/
2分探索木を中順走査すると昇順にソートされた列が得られる。
数値・進数
数値
よく出る2進数の値
2⁸=256、2¹⁰=1024(≈1K)、2²⁰=1M、2³⁰=1G。試験では「○ビットで何通り?」=2^○通り。
桁数
最大値(符号なし)
用途
4bit
15
16進1桁
8bit
255
1バイト
16bit
65535
ポート番号等
32bit
約42億
IPv4アドレス
数値
小数点の2進数表現の注意
0.1₁₀を2進数で正確に表せない(0.00011001…の無限循環)。これが浮動小数点演算誤差の原因。試験では「0.1+0.1+0.1≠0.3になることがある」という問題で出る。
システム・ハードウェア
ハード
パイプラインのハザード
データハザード(前の命令の結果が必要)・制御ハザード(分岐命令)・構造ハザード(資源の競合)の3種類。ハザード発生時はストール(待ち)が生じてCPIが悪化する。
ハード
メモリ階層(速い順)
レジスタ → キャッシュ(L1→L2→L3) → 主記憶(DRAM) → 補助記憶(SSD/HDD)。速いほど容量が小さく高価。キャッシュは自動的に管理される(プログラマから透過)。
速さ: レジスタ >> キャッシュ >> 主記憶 >> SSD >> HDD
OS
スケジューリングアルゴリズム
FCFS(先着順)、SJF(最短ジョブ優先)、ラウンドロビン(タイムスライス)、優先度スケジューリング(スタベーション注意)。試験では平均待ち時間・平均ターンアラウンドタイムを計算させる問題が頻出。
ネットワーク
ネット
OSI参照モデル 7層(上から)
アプリケーション層(7) → プレゼンテーション(6) → セッション(5) → トランスポート(4) → ネットワーク(3) → データリンク(2) → 物理(1)
「アプリはセッションをトランスポートするネットデーリンク物理」
ネット
TCP vs UDP の使い分け
TCP: 信頼性あり・順序保証・3ウェイハンドシェイク(HTTP/HTTPS/FTP/SSH)。UDP: 低遅延・ベストエフォート・再送なし(DNS/DHCP/動画ストリーミング/VoIP)。
セキュリティ
セキュリティ
暗号化方式の違い
共通鍵暗号(AES/DES): 速いが鍵配送問題あり。公開鍵暗号(RSA): 遅いが鍵配送不要。ハイブリッド: 公開鍵でセッション鍵を交換 → 共通鍵で通信(TLS/SSL の仕組み)。
セキュリティ
デジタル署名の流れ
① 送信者がハッシュ値を自分の秘密鍵で暗号化(=署名)→ ② 受信者が送信者の公開鍵で復号しハッシュ値を検証。改ざん検知と送信者認証が同時にできる。
セキュリティ
主な攻撃手法と対策
SQLインジェクション→プリペアドステートメント。XSS→サニタイズ/エスケープ。CSRF→トークン。フィッシング→SPF/DKIM。DoS/DDoS→レートリミット/CDN。
ソフトウェア開発・アルゴリズム
アルゴリズム
ソートアルゴリズム比較
アルゴリズム
平均
最悪
安定
バブルソート
O(n²)
O(n²)
✓
選択ソート
O(n²)
O(n²)
✗
挿入ソート
O(n²)
O(n²)
✓
クイックソート
O(n log n)
O(n²)
✗
マージソート
O(n log n)
O(n log n)
✓
ヒープソート
O(n log n)
O(n log n)
✗
開発
クリティカルパスの求め方
① 全ての経路の所要時間を計算。② 最も時間のかかる経路がクリティカルパス。③ クリティカルパス上のタスクの遅延はプロジェクト全体の遅延に直結する。フロート(余裕時間)=0の作業がクリティカルパス上の作業。