第107回 コンプリメント・コンプレックス(前編)

「今日はユーリが先生だよ!」とユーリは宣言した。
$ \newcommand{\BAR}[1]{\bar{#1}} \newcommand{\NEQ}{\neq} \newcommand{\LEQ}{\leqq} \newcommand{\LEQX}{\preceq} \newcommand{\ORX}{\vee} \newcommand{\ANDX}{\wedge} \newcommand{\CUP}{\cup} \newcommand{\CAP}{\cap} $
登場人物紹介
:数学が好きな高校生。
ユーリのいとこの中学生。のことを《お兄ちゃん》と呼ぶ。

僕の部屋

ユーリ「お兄ちゃん、インフル治ってよかったね!」

「熱出て、たいへんだったよ。《変幻ピクセル》イベントはどうだった?(第103回参照)」

ユーリ「ミルカさまが来てなくて残念だったけど、すんごく楽しかった! あのね、ミルカさまもインフルだったんだって。流行ってんだね」

「ああ……そうだろうね」

ユーリ「ミルカさまはいなかったけど、テトラさんとリサねーが案内してくれたんだよ」

「うん(リサ姉?)」

ユーリ「リサ姉って、あんまりしゃべんないけど、とっても親切なんだよ。知ってた?」

「そうだね。世話好きみたいだよ。どんな展示だった?」

ユーリ「あのね……」

ユーリはあちこち話を脱線させながらも、 双倉ならびくら図書館でのイベントを説明してくれた。

「それはおもしろいなあ。スキャナとフィルタとプリンタ」

ユーリ「そんでね、リサ姉からコンピュータのこと、たくさん教えてもらっちゃった。お兄ちゃん、詳しくないでしょ。 今日はユーリがコンピュータの計算について教えたげるよ。 資料ももらってきたし」

「それはそれは。今日はユーリ先生の講義か……」

クイズ

ユーリはトランプくらいの大きさのカードを一枚取り出した。

ユーリ「そんじゃ、お兄ちゃんにクイズ! これ、なーんだ?」

カード1(これ、なーんだ?)
$$ \begin{array}{cccc} 0 & 0 & 1 & 1 \\ 1 & 0 & 0 & 1 \\ \hline 1 & 1 & 0 & 0 \\ \end{array} $$

「いやいや、このくらいは僕も知っているよ。これは $2$ 進法の計算をしているんだね。 $10$ 進法で筆算するのと同じようにして、 $2$ 進法でも筆算はできるから。《 $2$ になったら繰り上がりする》ところだけが違うけど」

ユーリ「ほー」

「だから、このカード1は $(0011)_2$ と $(1001)_2$ の加算をしているんだろ?  $2$ 進法で $0011$ は $10$ 進法の $3$ で、 $2$ 進法で $1001$ は $10$ 進法の、ええと、何だろう。 $1,2,4,8$ だから、 $8+1=9$ だね」

ユーリ「お兄ちゃん、計算速いね」

「確かに、 $(0011)_2 + (1001)_2 = (1100)_2$ になってる。だって、 $2$ 進法の $1100$ は $10$ 進法の $12$ になってて、 $(3)_{10}+(9)_{10} = (12)_{10}$ だからね」

僕の解答
これは、 $3+9=12$ の加算をしている。
$$ \begin{array}{cccccrcrrrr} 0 & 0 & 1 & 1 & \cdots & (0011)_2 & \cdots & (3)_{10} \\ 1 & 0 & 0 & 1 & \cdots & (1001)_2 & \cdots & (9)_{10} \\ \hline 1 & 1 & 0 & 0 & \cdots & (1100)_2 & \cdots & (12)_{10} \\ \end{array} $$
$$ \begin{align*} (0011)_2 + (1001)_2 &= (1100)_2 \\ (3)_{10} + (9)_{10} &= (12)_{10} \\ \end{align*} $$

ユーリ「ふふん!」

「え、違うの?」

ユーリ「加算してるってのは正解でーす。でも、 $3 + 9 = 12$ を表しているってゆーのは、半分正解でーす。 減点、減点!」

「え? ちょっと待った。検算する……いや、合ってるよ。ほら」

$$ \begin{align*} (0011)_2 = 0\cdot2^3 + 0\cdot2^2 + 1\cdot2^1 + 1\cdot2^0 = 2+1 = (3)_{10} \\ (1001)_2 = 1\cdot2^3 + 0\cdot2^2 + 0\cdot2^1 + 1\cdot2^0 = 8+1 = (9)_{10} \\ \end{align*} $$

ユーリ「はーい、これは確かに合ってまーす。でもね、お兄ちゃん。 $1001$ というビットパターンは $9$ を表さなきゃいけないとは決まってないのでーす」

「 $1001$ が $9$ を表さなかったら、何を表す?」

ユーリ「 $1001$ は $-7$ を表してもいいのでーす! そして $1100$ は $-4$ でもいいのでーす! ほら計算あってるう!」

ユーリの解答
これは、 $3+9=12$ の加算をしていると考えてもいいけど、 $3 + (-7) = -4$ の加算、つまり、 $3-7=-4$ の減算をしていると考えてもいい。
$$ \begin{array}{cccccrcrcrcr} 0 & 0 & 1 & 1 & \cdots & (0011)_2 & \cdots & (3)_{10} & \cdots & (3)_{10} \\ 1 & 0 & 0 & 1 & \cdots & (1001)_2 & \cdots & (9)_{10} & \cdots & (-7)_{10} \\ \hline 1 & 1 & 0 & 0 & \cdots & (1100)_2 & \cdots & (12)_{10} & \cdots & (-4)_{10} \\ \end{array} $$
$$ \begin{align*} (0011)_2 + (1001)_2 &= (1100)_2 \\ (3)_{10} + (9)_{10} &= (12)_{10} \\ (3)_{10} + (-7)_{10} &= (-4)_{10} \\ \end{align*} $$

「 $1001$ というビットパターンが $-7$ を表す……それはどういうルールなんだ?」

ユーリ「リサ姉は表を作ってくれたよん。 $4$ ビットのビットパターンを、符号無しで考えた場合と、符号付きで考えた場合の一覧表。これだ!」

カード2( $4$ ビットのビットパターンと、整数の対応表)
$$ \begin{array}{rrr} \text{ビットパターン} & \text{符号無し} & \text{符号付き} \\ \hline 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 & -7 \\ 1010 & 10 & -6 \\ 1011 & 11 & -5 \\ 1100 & 12 & -4 \\ 1101 & 13 & -3 \\ 1110 & 14 & -2 \\ 1111 & 15 & -1 \\ \end{array} $$

「符号無しと符号付き。符号無しの方はいいけれど、符号付きは……これは、どういうルールなんだ?」

ユーリ「ルールって?」

「リサちゃんがこの表をくれたんだろ?  $4$ ビットのビットパターンを符号付きで表すときには、何かルールがあるにちがいないよね」

ユーリ「あー、ま、そだね。それはさー……」

「いや、大丈夫。表があるんだから、考えることができる」

問題
カード2の《符号付き》は、 どういうルールでビットパターンと整数を対応付けしているのか。

ユーリ「お兄ちゃんは、いろんなとこから問題見つけんだね」

「……」

ユーリ「はいはい、思考モード全開中……」

「なるほどね。カード1に出てきた $0011, 1001, 1100$ のビットパターンを見てみるとおもしろいな」

ユーリ「何で?」

$$ \begin{array}{rrr} \text{ビットパターン} & \text{符号無し} & \text{符号付き} \\ \hline \vdots & \vdots & \vdots \\ 0011 & 3 & 3 \\ \vdots & \vdots & \vdots \\ 1001 & 9 & -7 \\ \vdots & \vdots & \vdots \\ 1100 & 12 & -4 \\ \vdots & \vdots & \vdots \\ \end{array} $$

「ほら、《符号無し》の方では $3 + 9 = 12$ という加算が成り立っているけれど、同じように《符号付き》の方でも $3 + (-7) = -4$ という加算がちゃんと成り立っている」

ユーリ「だから、そーゆー話してたんだけど」

「お兄ちゃんが感心しているのは、いまのような加算が、この表のどの二つの数を使っても成り立っているということに対してなんだよ。 たとえば、 $0001$ と $1101$ で考えてみると……」

$$ \begin{array}{cccc} 0 & 0 & 0 & 1 \\ 1 & 1 & 0 & 1 \\ \hline 1 & 1 & 1 & 0 \\ \end{array} $$

ユーリ「 $0001$ と $1101$ で $1110$ だね」

「そして、カード2の表を見てみる」

$$ \begin{array}{rrr} \text{ビットパターン} & \text{符号無し} & \text{符号付き} \\ \hline \vdots & \vdots & \vdots \\ 0001 & 1 & 1 \\ \vdots & \vdots & \vdots \\ 1101 & 13 & -3 \\ 1110 & 14 & -2 \\ \vdots & \vdots & \vdots \\ \end{array} $$

ユーリ「ふんふん」

「確かに、《符号無し》では $1 + 13 = 14$ が成り立ち、《符号付き》では $1 + (-3) = -2$ が成り立っている。すごく、うまくできてる表だ」

ユーリ「リサ姉は『ただし、オーバーフローに注意』って言ってたよ。咳しながら」

「オーバーフロー?」

ユーリ「うん、ほら、《符号無し》だと $0$ から $15$ までしかないもん」

「そうか。たとえば $0001$ と $1111$ だと……」

$$ \begin{array}{ccccc} & 0 & 0 & 0 & 1 \\ & 1 & 1 & 1 & 1 \\ \hline 1 & 0 & 0 & 0 & 0 \\ \end{array} $$

ユーリ「 $0001$ と $1111$ で $10000$ だね」

「 $5$ ビットになってしまうから、カード2の表には出てこない……けど、下の $4$ ビットだけなら意味はあるなあ」

$$ \begin{array}{rrr} \text{ビットパターン} & \text{符号無し} & \text{符号付き} \\ \hline 0000 & 0 & 0 \\ 0001 & 1 & 1 \\ \vdots & \vdots & \vdots \\ 1111 & 15 & -1 \\ \end{array} $$

ユーリ「意味って?」

「ほら、 $0001$ と $1111$ で、 $10000$ になるとして、下の $4$ ビットだけ……つまり $0000$ を考える。そうすると、《符号無し》の方だと $1 + 15 = 0$ となって変になるけど、 《符号付き》の方は $1 + (-1) = 0$ となって、ちゃんと理屈に合ってる」

ユーリ「そだね」

「いや、両方とも理屈に合ってる! 《 $16$ で割った余り》を考えればいいんだ。 $4$ ビットで考えてるんだから当然か!」

ユーリ「 $16$ で割った余り?」

「そうだよ。 $1 + 15 = 16$ だけど、 $16$ で割った余りを考えれば $1 + 15$ は $0$ だと言える。 $16$ を $16$ で割った余りは $0$ だから。 $$ 1 + 15 \equiv 0 \pmod{16} $$ ということだよ」

ユーリ「《符号無し》はいいんだけど、《符号付き》の方はどうなったの?」

「うん、たぶん、数式で表せると思うよ。 $0000$ から $0111$ までは《符号無し》と《符号付き》は同じ対応関係だよね」

$$ \begin{array}{rrr} \text{ビットパターン} & \text{符号無し} & \text{符号付き} \\ \hline 0000 & 0 & 0 \\ 0001 & 1 & 1 \\ 0010 & 2 & 2 \\ 0011 & 3 & 3 \\ 0100 & 4 & 4 \\ 0101 & 5 & 5 \\ 0110 & 6 & 6 \\ 0111 & 7 & 7 \\ \end{array} $$

ユーリ「そだね」

「だから、問題は、左端のビットが $1$ のときのルールだ」

$$ \begin{array}{rrr} \text{ビットパターン} & \text{符号無し} & \text{符号付き} \\ \hline 1000 & 8 & -8 \\ 1001 & 9 & -7 \\ 1010 & 10 & -6 \\ 1011 & 11 & -5 \\ 1100 & 12 & -4 \\ 1101 & 13 & -3 \\ 1110 & 14 & -2 \\ 1111 & 15 & -1 \\ \end{array} $$

ユーリ「……」

この続きは有料会員登録をすると
読むことができます。
cakes会員の方はここからログイン

1週間無料のお試し購読する

cakesは定額読み放題のコンテンツ配信サイトです。簡単なお手続きで、サイト内のすべての記事を読むことができます。cakesには他にも以下のような記事があります。

人気の連載

おすすめ記事

ケイクス

この連載について

初回を読む
数学ガールの秘密ノート

結城浩

数学青春物語「数学ガール」の中高生たちが数学トークをする楽しい読み物です。中学生や高校生の数学を題材に、 数学のおもしろさと学ぶよろこびを味わいましょう。本シリーズはすでに12巻も書籍化されている大人気連載です。 (毎週金曜日更新)

この連載の人気記事

関連記事

関連キーワード

コメント

hyuki ビット演算の話はこのあたりに https://t.co/WlOkigknKx 3年以上前 replyretweetfavorite

wasanp_ @nullbot CM消費者ホットライン略。そういえばNHK高校数学Ⅰhttps://t.co/B3NyDvzcLZ で松本あゆ美お姉さんと変なおっさんがコンプリコンプリ言ってたけど何なのヘンション?というのは冗談で、その検索から発見https://t.co/NtuT796MEA 4年以上前 replyretweetfavorite

hyuki Web連載「 後編03/28 15:51まで https://t.co/YpXip7mr66 5年以上前 replyretweetfavorite