シフト演算ってなぁに?10進数と2進数で考えてみよう!
詳細情報
発表ハイライト
- シフト演算は、ビット演算の一種で、数字を右や左に動かすことで掛け算や割り算を表現できるよ!
- 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倍というように、基数に合わせた倍数で計算できます。コンピュータ上では、有限桁の制約から、論理シフト、算術シフト、循環シフトなどの種類があります。
今回の発表では、シフト演算の基礎と、コンピュータでの実装方法について学ぶことができましたね。