基本情報技術者試験の科目Bの公開問題を題材に,2の補数を求める処理について学習します。この問題では,ビットを反転して1を加えることで,2の補数を求める方法を確認します。
令和8年度 基本情報技術者試験 公開問題 科目B 問2
問 次のプログラム中の に入れる正しい答えを,解答群の中から選べ。
関数 complement は,引数として渡された8ビット型の値 x について,x に加算すると 00000000 になる値を返す。8ビット型の加算は,値を符号なし2進数とみなしたときの加算とし,桁あふれが発生したときのあふれた桁は無視する。演算子∧,∨,▽ は,それぞれビット単位の論理積,論理和,排他的論理和を表す。
〔プログラム〕
○8ビット型: complement(8ビット型: x)
8ビット型: y
y ←
y ← y + 00000001
return y
解答群
| ア x ∧ 01111111 | イ x ∧ 11111111 | ウ x ∨ 01111111 |
| エ x ∨ 11111111 | オ x ▽ 01111111 | カ x ▽ 11111111 |
【解答】カ
【解説】
関数 complement は,引数として渡された8ビット型の値 x について,x に加算すると 00000000 になる値を求める関数である。これは,xの2の補数を求める処理である。負の整数を8ビットの2の補数で表現する場合,まず絶対値を8ビットの2進数で表し,そのビットを反転して1を加える。例えば,−23を2の補数で表現する場合,まず23を8ビットの2進数で表すと 00010111 になる。この問題では,この最初の「−23の絶対値を8ビットの2進数で表す」という処理は既に終わっており,x = 00010111 が与えられたところから処理が始まっている。まず,xの各ビットを反転する。ビットをすべて反転するには,11111111 と排他的論理和(XOR)を取ればよい。XORでは,0と1,1と0の組合せで1になり,0と0,1と1の組合せで0になるため,11111111 とXORを取ると,xの各ビットが反転する。
00010111 ▽ 11111111 = 11101000
次に,00000001 を加える。
11101000 + 00000001 = 11101001
したがって,00010111 の2の補数は 11101001 となる。11101001 は8ビットの2の補数表現で −23を表す。
【参考】
この問題のポイント
この問題から学べることは,
- 2の補数を求める方法
- XOR(排他的論理和)によってビットを反転する方法
- 11111111 とのXORによって8ビット全てを反転する処理
- ビットを反転した値に1を加える処理
です。特に,2の補数は「ビットを反転して1を加える」ことで求められることを理解しておきましょう。
基本情報技術者試験の学習におすすめの参考書
基本情報技術者試験の合格を目指す方におすすめの参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。


