← メディア一覧

ビットシフト:高速計算の裏ワザ

7分09秒 | FEビットシフト

基本情報技術者試験の頻出テーマを解説した動画コンテンツです。

トランスクリプト(字幕テキスト)

こんにちは。今日のこの解説では、コンピューターがとんでもない速さで計算するために使っている、すごくシンプルなのにめちゃくちゃパワフルな裏技に迫っていきます。 それは何かと言うと、ビットをただずらすだけというテクニックなんです。 さて、いきなりですが、皆さんに質問です。12に10をかける時、どうしますか? わざわざ筆算したりしますかね? きっとほとんどの人がこう考えたのではないでしょうか。「簡単だよ。後ろに0を1個つけるだけでしょ」って。 そう、その通り。答えは1230です。 僕たちはわざわざ計算するんじゃなくて、ただ数字の桁をずらしているだけなんですよね。 では、コンピューターの世界では、この桁をずらすという超便利なショートカット、どうやって使っているのでしょうか? 実は、それこそが今日のメインテーマ、ビットシフトの正体なんです。 OK、では早速その中身を見ていきましょう。 最初のコンセプトは、倍増の魔法、左シフトです。 コンピューターがどうやって一瞬で、本当に一瞬で数を2倍にするのか、その秘密がここに隠されているんですね。 例えば、数値の3で考えてみましょう。 コンピューターが使っている2進数で表すと、0011になります。 画面に出ているこの数字、よく見ていてくださいね。 さあ、いきますよ。この4つのビット全部を、一斉に左へ1つだけスッとスライドさせてみます。 ほら、こんな感じで左へ、左へ。 するとどうでしょう。ビットが左にずれて、空っぽになった右端には新しく0が入りました。結果、0110という新しい並びになりましたね。 ではこの0110という2進数、僕たちが普段使う10進数に直すと、そう、6なんです。 すごいですよね。元の数3があっという間に2倍になりました。 これこそがコンピューター版「0を1つ足す」操作というわけです。 このスライドが今の現象をずばりとまとめてくれていますね。 ビットを1つ左にずらす左ビットシフトというのは、どんな数字でも一瞬で2倍にできる魔法の杖のようなものなんです。 普通の掛け算の命令よりもずっと速いというのがポイントです。 さて、左にずらして2倍になるのであれば、逆はどうなると思いますか? そう、次のセクションでは、今度は右にずらすことで数を半分にする方法を見ていきましょう。 もう予想通りですよね。 ビットを右にずらすと、真逆のことが起きます。つまり2で割るのと同じことになるんです。 これは、単純にビットを右にずらして、空いた左端を0で埋めるというすごくシンプルなルール。 だから論理右シフトと呼ばれています。 このスライドを見ると、その関係性がすごくよくわかりますよね。 左側では3が左シフトで6になる。右側ではその6が右シフトで3に戻る。この美しい対称性。 コンピューターの中では複雑な計算じゃなくて、このシンプルなスライドが行われているからこそ、あの驚異的なスピードが出せるわけです。 でも、この完璧に見えるシステムにもある壁が立ちはだかります。 それが負の数、つまりマイナスの数字です。 ここでちょっとだけ厄介な問題が起きてしまうんです。 そもそもコンピューター2進数でどうやってマイナスを表現しているのでしょうか? 実は一番左のビット符号ビットという特別な役割で使っているんですね。ここが0ならプラス、1ならマイナスというシンプルなルールがあるんです。 さあ、問題はここからです。 マイナスの数を先ほどと同じ論理右シフトで右にずらすとどうなるか。 一番左でマイナスを表していた1が右へ押し出されて、新しく左端に入ってくるのは0ですよね。 これではマイナスの数がプラスの数に化けてしまいます。計算がめちゃくちゃになってしまいます。 でも安心してください。コンピューターの設計者たちはこの問題を解決するとても賢い方法を考え出しました。 そこで登場するのが符号を保つシフト、その名も算術シフトです。 その解決策というのがまた面白いんです。 まるで画鋲で突き刺すみたいに、符号ビットをその場に固定しちゃおうというアイデアなんですね。 では、マイナス5で見てみましょうか。 2進数だと1011です。 一番左の1が、これがマイナスですよという印の符号ビット。 ここにほら、画面のように画鋲がぐさっと刺さっているとイメージしてください。 さあ、これを右にシフトします。 画鋲で止められた符号ビット以外のビットたちが右へ、右へとスライドしていきます。そして空いたスペースには何が入るかというと、固定された符号ビット1がそのままコピーされて埋められるんです。 結果は1101。これを10進数に直すとマイナス3になります。 あれ?マイナス5割る2はマイナス2.5じゃないの?と思うかもしれませんが、コンピューターはこういう時、小数点以下をマイナス側に切り捨てるので、マイナス3が正しい答えなんです。 何より大事なのは、ほら、マイナスの符号がちゃんと保たれたまま割り算ができたということなんです。 まさにこのスライドの言葉通りですね。 算術シフト符号を保ったまま負の数を2で割るためのコンピューターの賢い方法である。 このおかげでプラスの数もマイナスの数も同じシフトという操作でものすごく効率よく計算できるんです。 さて、今日の話をこの表で整理してみましょう。 左シフトは数を2倍にするシンプルな魔法でした。 そして、右にずらす割り算には2種類あったんですね。 論理右シフトはプラスの数専用。 そして算術右シフト符号ビットをがっつり守ることでマイナスの数にも対応できるより賢い方法だったというわけです。 では、なぜこんな話が重要なのでしょうか? それはもう、このビットシフトが普通の掛け算や割り算に比べてとんでもなく速くて効率がいいからなんです。 これは単なる豆知識とかではなく、プロセッサーがどうやって動いているかというその根っこに関わるものすごく大事な原理なんです。 コンピューターの本当に基本的な操作の裏側には、今日見たような賢いトリックがあと一体いくつ隠されているのでしょうね。 そう考えると、なんだかワクワクしてきませんか? 今回の解説はここまでです。ありがとうございました。

このコンテンツは Web society で視聴・学習できます。