コンピュータの中で「負数」をメモリ上に記憶するには、いくつかの方法がある。基本的には、CPUの機械語命令で負数を扱う方法がある。
それとは別にコンピュータ言語が負数をどう表現するのかという問題もある。この2つに関しては、区別が必要だが、コンピュータ言語で記述したプログラムの実行効率を考えるとメモリ中ではCPUに合わせることが多い。しかし、ファイルに書き出す、ネットワークでデータとして送信するような場合、相互の解釈の問題となるため、気にしておくべき問題点である。

最も簡単なのは、最上位ビットを使って正負を表す方法である。このとき、正の整数と一致させるために、最上位ビットが0(ゼロ)のときに正数、1のときに負数とすることが多い。整数の絶対値に対して最上位ビットを1にしたものを、その数の負数と定義する。この方法では、たとえば4ビットの整数値では、7~0~-7を表現できる。このやりかたを便宜上、この記事では「符号ビット」方式と呼ぶことにする。

ただし、符号ビット方式にはちょっとしたムダがある。4ビットで表現できる数は、全部で16個であるのに、「7~0~-7」では、15個の数しか表現できていない。これは、2進数で「1000」というパターンが定義上ゼロになってしまうから。この方法ではゼロを表すパターンが「0000」と「1000」の2つできてしまう。
もっとも、数値が16ビット、32ビット、64ビットと大きくなれば、そのうちの1つぐらいのムダはそれほど気にするほどのことではない。それよりも符号ビットを操作するだけで正数、負数の変換が可能で、符号ビットで正負の判断も簡単に行えるというメリットのほうが大きくなる。

負の整数を表す方法としては、符号ビット方式のほかに「補数」を使う方法がある。広く使われているのは「2の補数」を使って負数を表現する方法(表01)。2の補数を使うと「-1」を全てのビットが1になったパターンで表現する。また、ゼロは全てのビットが0で表現する。

2の補数を生成するには、全ビットを反転させて1を足す。「0b」で始まる数値が2進数パターンを表すとする。4ビットの整数で-1を作るには、「1=0b0001」から全ビットを反転させて「0b1110」を作り、「0b0001=1」を加算して「0b1111」とする。こうして作られた「-1」は、「1」と加算すると結果が「0=0b0000」となる。

なお、歴史上、1の補数を使ったコンピュータも存在していたらしい。1の補数は、負数をすべてのビットを反転させて作る。
整数と正の整数との減算は、整数と負数の加算で行い、最後に繰り上がりを加算して行う(表02)。2の補数と似ているものの、計算が少し面倒になるのと、「0」と「-0」がともにゼロを意味する点に注意する必要がある。

補数を使うことで、減算専用の回路を作る必要がなくなり、符号の反転回路と通常の加算回路を使うだけよいため、ハードウェアを簡略化できる。

今回のタイトルネタは、「ソラリス」(2015年、ハヤカワ文庫SF)である。1961年のスタニスワフ・レムの作品で原題はSolaris。同作品は、1965年に邦訳が早川書房から「ソラリスの陽のもとに」というタイトルで出版されたが、改編され、検閲で一部が削除されたロシア語版からの翻訳だった。1978年にソ連(当時)でアンドレイ・タルコフスキーの映画「惑星ソラリス」が国内公開された。このとき、映画宣伝で文庫本の表紙に映画の1シーンが入った。筆者が邦訳を読んで、映画を見に行ったのが1979年頃。映画は原作の枠組みのみを使い、1970年の万博会場で地球の未来都市を撮影するつもりが、撮影隊が大阪に来たときには、万博は終了し、大半の建物は壊されていた。このため、首都高の信濃町あたりを撮影して未来都市の映像とした。映画は、2002年にリメイクされたが、原作者は不満だった。
そもそも、この作品は、宇宙で出会う知的生命体は、まったく人間と異なる可能性があり、言葉のわからない外人というレベルではなく、そもそも言語を利用しているのかさえ判断できず、「次元が異なる」ことを描いたものだ。これらから考えると、翻訳による意思疎通が可能な宇宙人などそもそも存在するのかどうか。

当時、筆者達はソ連という同じ人間であっても、永遠にわかり合えない「冷戦」の向こう側から来た小説「ソラリスの陽のもとに」を読むことしかできなかった。結局、本当の「ソラリス」に触れられたのは、2004年に国書刊行会から完全版が出てからだった。タイトルには含まれていないが「完全版=Complete (Version)」と「補数=complement」をかけた。
編集部おすすめ