シフト演算ってなぁに?10進数と2進数で考えてみよう!

詳細情報

集会名 CS集会
日時 2023年12月19日 22:00 - 22:30
テーマ シフト演算について1
発表者 夜鍋ヨナ
発表資料 ファイル

発表ハイライト

  • シフト演算は、ビット演算の一種で、数字を右や左に動かすことで掛け算や割り算を表現できるよ!
  • 10進数では左シフトは10倍、右シフトは1/10倍になる!
  • 2進数では左シフトは2倍、右シフトは1/2倍になる!
  • コンピュータでは有限桁しか扱えないから、論理シフト、算術シフト、循環シフトなど、色々な種類があるんだ!

VRChatの「CS集会#15」で夜鍋ヨナさんが発表した「シフト演算について1」の内容を元に、シフト演算について解説していきます。

コンピュータの世界では、様々な計算が行われますが、その中で「シフト演算」という、ちょっと変わった計算方法があるのをご存知でしょうか?今回は、このシフト演算について、10進数と2進数の例を交えながら、その仕組みや特徴を分かりやすく解説していきます!

シフト演算ってどんな演算?

シフト演算は、ビット演算の一種で、数字を右や左に動かすことで、掛け算や割り算のような計算を実現する、ちょっとユニークな演算です。

左シフトと右シフト

シフト演算には大きく分けて2種類あります。

  • 左シフト演算: 数字を左に動かす演算で、基本的に掛け算に相当します。
  • 右シフト演算: 数字を右に動かす演算で、基本的に割り算に相当します。

例えば、10進数の100を1回左シフトすると1000になり、10倍になります。逆に、1回右シフトすると10になり、1/10倍になります。

10進数のシフト演算

10進数のシフト演算は、私たちが普段使っている数字で考えてみると、イメージしやすいでしょう。

左シフト:10倍の世界

10進数の左シフトは、数字の一番右に0を追加することに相当します。

例えば、100を1回左シフトすると、1000になりますね。これは、100に10を掛けた結果と同じです。

N回左シフトすると、元の数字に10をN回掛けたことと同じになります。

右シフト:1/10倍の世界

10進数の右シフトは、数字の一番右の桁を削除することに相当します。

例えば、100を1回右シフトすると、10になります。これは、100を10で割った結果と同じですね。

N回右シフトすると、元の数字を10をN回割ったことと同じになります。

2進数のシフト演算

次は、コンピュータが得意とする2進数で考えてみましょう。

2進数では、左シフトは2倍、右シフトは1/2倍になります。

左シフト:2倍の世界

2進数の左シフトは、数字の一番右に0を追加することに相当します。

例えば、2進数の100(10進数で4)を1回左シフトすると、1000(10進数で8)になります。これは、4に2を掛けた結果と同じですね。

N回左シフトすると、元の数字に2をN回掛けたことと同じになります。

右シフト:1/2倍の世界

2進数の右シフトは、数字の一番右の桁を削除することに相当します。

例えば、2進数の100(10進数で4)を1回右シフトすると、10(10進数で2)になります。これは、4を2で割った結果と同じですね。

N回右シフトすると、元の数字を2をN回割ったことと同じになります。

コンピュータ上でのシフト演算

さて、ここまで無限桁の数字を想定してシフト演算を見てきましたが、コンピュータは有限桁しか扱えません。そのため、コンピュータ上では、シフト演算にもいくつかの種類があります。

シフト演算の種類

  • 論理シフト: 符号ビットを気にせず、左シフトでは右端に0を、右シフトでは左端に0を挿入します。
  • 算術シフト: 符号ビットを維持し、左シフトでは右端に0を、右シフトでは左端に符号ビットをコピーします。
  • 循環シフト: 数字をビット列として循環させます。左シフトでは最上位ビットを最下位ビットに、右シフトでは最下位ビットを最上位ビットに移動します。

ヨナさんの発表では、設計中のアーキテクチャは4ビットで、論理シフトを実装しているとのことでした。

まとめ

シフト演算は、ビット演算の一種で、数字を右や左に動かすことで、掛け算や割り算を表現できる便利な演算です。10進数では10倍、2進数では2倍というように、基数に合わせた倍数で計算できます。コンピュータ上では、有限桁の制約から、論理シフト、算術シフト、循環シフトなどの種類があります。

今回の発表では、シフト演算の基礎と、コンピュータでの実装方法について学ぶことができましたね。

シフト演算について1のスライド資料

CS集会の他の発表もチェック!

VRChatで量子コンピュータの世界を体験!CS集会#33で夜鍋ヨナさんが紹介した量子コンピュータの世界

VRChat CS集会で発表!量子コンピュータで半加算回路を実装してみたよ!

生成AIとプログラミング:夜鍋ヨナさんが語る、LLMとシステム開発の未来!

VRChat CS集会で学ぶ!比較器の仕組みと引き算を用いた実装

シフト演算をわかりやすく解説!コンピュータ内部でどう動いているの?

VRChat CS集会で発表!8ビットマイコンZ80にCollapseOSを載せる挑戦!