ラノベ×マンガで学ぶ基本情報技術者試験 2-2: 負の数の表現 – マイナスの数をどう表す?

谷の奥から、不気味な気配が漂ってきた。

「…グルルル…」

低く響く唸り声とともに、暗闇の中から数字で構成されたゴブリンがゆっくりと姿を現した。

その体は「1」と「0」の数字が絡み合うように刻まれ、手には不気味な光を放つ杖を握っている。
ゴブリンはゆっくりと顔を上げ、シンジたちを鋭い目で睨みつけた。

「負の数の扱いを知らなければ…この谷を通ることはできない…!」

ゴブリンの声が響き渡り、谷全体の空気がピリッと引き締まる。

「負の数?普通にマイナスを付けるだけじゃダメなのか?」シンジは戸惑いながらマナに視線を向けた。

「それがね、コンピュータは0と1しか使えないから、マイナスという概念をそのまま扱うことができないんだよ。」マナは冷静に説明しながら、杖を掲げた。「だから、負の数を表現する方法がいくつか考えられたの!」


🔢 絶対値表現 – 最も単純な方法

マナ

最初に考えられたのが『絶対値表現』よ。

マナが杖を振ると、空中に4ビットの数値が光り輝く。

マナ

例えば、4ビットで『5』と『-5』を表すとすると、こうなるの。

+5:  0101  
-5:  1101  

+5: 0101  

-5:  1101  

マナ

この方法だと、一番左の符号ビットを0にすると正の数、1にすると負の数になるの。

シンジ

へぇ、じゃあ簡単じゃん!

シンジは納得したように頷いたが、マナは首を横に振った。

マナ

でも、この方法だと足し算や引き算がうまくいかないことが多いんだよ。例えば、5と-5を足しても、計算がうまくいかなくなるの。

シンジ

なんだよ、それじゃあ使えないじゃん!

シンジは眉をひそめる。

🔄 1の補数 – ビットを反転して負を作る方法

マナは空中に新たな数字を映し出した。

マナ

次に考えられたのが『1の補数』!

マナ

これは、すべてのビットを反転させることで負の数を表現するの。

+5:  0101  
-5(1の補数): 1010  

+5:  0101  

-5(1の補数): 1010  

シンジ

つまり、0を1に、1を0にするだけで負の数が作れるんだね!

シンジは頷いたが、マナはさらに続けた。

マナ

でもね、この方法だと『0』が2種類存在してしまうのが問題なの。

マナの杖が示した光に「+0」と「-0」の2つの数値が浮かび上がる。

+0:  0000  
-0(1の補数): 1111  

+0:  0000  

-0(1の補数): 1111  

シンジ

0が2つあるのは…なんか気持ち悪いな。

シンジは首をかしげた。

✅ 2の補数 – 現在使われている方法!

マナ

だから、今では『2の補数』が使われているの!

マナの杖が輝くと、空中に計算の流れが浮かび上がった。

マナ

2の補数は、1の補数に『1』を足すだけで負の数を表現できるんだ。

+5:  0101  
1の補数(ビット反転): 1010  
+1 を加える: 1011  

+5:  0101  

1の補数(ビット反転): 1010  

+1 を加える: 1011  

マナ

2の補数は、1の補数に『1』を足すだけで負の数を表現できるんだ。

マナ

これで-5を表現できるし、『0』は1種類しかないんだ。

シンジ

なるほど!これなら便利だな!

シンジは目を輝かせた。

💥 補数ゴブリンとの戦い

補数ゴブリンは不敵な笑みを浮かべると、杖を振り下ろし、宙に問題を浮かび上がらせた。

「負の数の計算がわかったなら、これを解いてみろ…!4ビットの範囲で、+3と-3を足してみろ!

⚔ シンジの挑戦: +3と-3の計算

「えっ、どうやるんだ…?」シンジは焦りながらも、マナの方を見やる。

「大丈夫。私が一緒にやるから!」マナが優しく声をかけ、計算の流れを示した。

① +3の2進数表現

+3(2進数):  0011  

+3(2進数):  0011  

② -3の2の補数を求める

3のビット反転: 1100  
+1 を加える: 1101  

3のビット反転: 1100  

+1 を加える: 1101  

③ 足し算をする!

  0011  
+ 1101  
------------
 10000  

 0011  

+ 1101  

————

 10000  

4ビットだから、一番左の桁あふれ(キャリー)は無視して…結果は『0000』、つまり『0』になるよ!」

マナの説明を聞きながら、シンジは数値を確認する。

「おお、やった!負の数の計算がわかってきた気がする!」

その瞬間、補数ゴブリンが悔しそうに唸り、杖を握る手を震わせた。

「ふん…なかなかやるではないか…だが、お前たちにこの試練を突破させるわけにはいかぬ!」

ゴブリンが杖を振ると、闇の中から新たな影が蠢き出した――もう一体の補数ゴブリンだ!

💥 シンジ、一人で試練に挑む!

「な…!?」シンジが身構える間もなく、新たな補数ゴブリンがマナの背後に回り込み、素早く杖を振った。

「マナ、後ろ――!」

バチッ!

突如として、紫色の電撃がマナの体を貫いた。

「くっ…何…?」マナの体が硬直し、膝をつく。「しまった…魔力が…使えない…!」

「マナ!」シンジが駆け寄ろうとしたが、補数ゴブリンが目の前に立ちはだかる。

「魔法使いを封じてやった…これで貴様は一人だ。さぁ、次の問題を解けなければ、この娘の麻痺は解けないぞ!」

「卑怯な手を…!」シンジは拳を握りしめ、ゴブリンを睨みつけた。

だが、やるしかない。マナを助けるためには、目の前の問題を解くしかない!

⚡ 最終試練: -7と+5の足し算

問題: 「4ビットの範囲で、-7と+5を足せ!

「お前に解けるか?」ゴブリンは不気味に笑いながら、シンジの答えを待つ。

「やるしかねぇ…!」シンジは拳を握り、冷静に計算を始めた。

解答

1110

① -7の2の補数を求める

+7(2進数): 0111
7のビット反転: 1000  
+1 を加える: 1001  

+7(2進数): 0111

7のビット反転: 1000  

+1 を加える: 1001  

② +5の2進数表現

+5(2進数):  0101  

+5(2進数):  0101  

③ 足し算をする!

  1001  
+ 0101  
------------
 1110  

 1001  

+ 0101  

————

 1110  

「…1110!

シンジが叫ぶと、補数ゴブリンの体が激しく揺れた。

「な…貴様、なぜ負の数の計算ができる…!」

「こんなもん、さっきの試練と同じだ!お前の謎かけなんかに負けるか!」

光がゴブリンを包み込み、消滅の兆しが見え始める。そして――

✨ 麻痺解除!ゴブリンの退却!

「うっ…!」マナの体が軽くなり、手足が動くようになった。

「マナ、大丈夫か!?」

「ええ…シンジが試練を突破したおかげで、魔法が戻ったみたい!」マナは微笑みながら立ち上がると、杖を振ってゴブリンを払いのける。

「バカな…こんな小僧に…負の数を理解されたというのか…!」

補数ゴブリンの体は霧のように薄れ、最後に「ぐぬぬ…次こそは…」という悔しげな声を残して、完全に消滅した。

🔥 勝利!シンジの成長!

シンジは大きく息を吐いた。「ふぅ…なんとかなった…!」

マナはそんなシンジを誇らしげに見つめ、「おめでとう、シンジ!負の数の計算をマスターしたね!」と笑顔で言った。

シンジは『2の補数計算』のスキルを習得した!

「これで、どんな数が来ても怖くないぜ!」シンジは拳を握りしめ、自信に満ちた表情を浮かべた。

「この知識は、これからの試練でも絶対に役立つよ!」マナが頷く。

「よし、次の冒険に進もう!」

谷の先には、さらなる試練が待っている。しかし、シンジはすでにその目に迷いはなかった。