【ライタスの日常】資格勉強で学んだ「シフト演算」の話
こんにちは。
ライタスの営業担当・Kです。
資格勉強のアウトプットシリーズということで、
今回は 「シフト演算」 について学んだ内容をまとめてみたいと思います。
基本情報技術者試験でもよく出てくるテーマですが、
仕組みを理解するとコンピューターの計算方法がよく分かる内容でした。
【シフト演算とは】
シフト演算とは、
2進数を表すビット列を左右にずらす操作のことです。
例えば10進数の場合、
73.6 → 左に1桁ずらす → 736(×10)
73.6 → 右に1桁ずらす → 7.36(×1/10)
このように、桁がずれると10倍・1/10倍になります。
ここでいう 10 を 基数 と呼びます。
2進数の場合
2進数でも考え方は同じです。
ただし基数が 2 になります。
そのため、
左に1ビットずれる → 2倍
左に2ビットずれる → 4倍
つまり、
左に n 個ずれると 2ⁿ 倍
になります。
逆に右にずらすと、
右に1ビット → 1/2
右に2ビット → 1/4
つまり、
右に n 個ずれると 2⁻ⁿ 倍
になります。
このため、
左シフト = 掛け算
右シフト = 割り算
と考えることができます。
【シフトの種類】
ビットをずらす方法には
大きく分けて 2種類あります。
論理シフト
算術シフト
それぞれの違いは
符号を考慮するかどうかです。
【論理シフト】
論理シフトは
符号を考慮せずにシフト操作する方法です。
論理シフト(左)
左シフトでは、
空いたスペースに 0を入れる
というルールになります。
また、ビットが左にずれて
1がはみ出した場合はオーバーフローと呼ばれます。
論理シフト(右)
右シフトの場合は、
空いたスペースに 0を入れる
という処理になります。
また、右側からはみ出たビットは
割り算の余りを表していると考えられます。
【算術シフト】
算術シフトは、
符号を考慮してシフト操作する方法です。
つまり、
符号付きの数値を扱う場合のシフトになります。
算術シフト(左)
左シフトは基本的に論理シフトと同じで、
空いたスペースには 0
が入ります。
ただし、
符号ビットと異なる値がはみ出した場合
これを オーバーフローと判断します。
算術シフト(右)
算術右シフトでは、
空いたスペースに 符号ビットと同じ値を入れます
つまり、
正の数 → 0が入る
負の数 → 1が入る
という仕組みになります。
これによって、
符号付きの値を保ったまま
割り算のような処理ができます。
シフト演算のまとめ
シンプルに整理すると次のようになります。
【論理シフト】
・左シフト
空いたスペース → 0
1がはみ出る → オーバーフロー
・右シフト
空いたスペース → 0
はみ出た部分 → 割り算の余り
【算術シフト】
・左シフト
空いたスペース → 0
符号ビットと異なる値がはみ出すとオーバーフロー
・右シフト
空いたスペース → 符号ビット
はみ出た部分 → 割り算の余り
【おわりに】
最初は「ビットをずらすだけ?」と思っていましたが、
実際に勉強してみると、
掛け算や割り算との関係
符号ビットの扱い
オーバーフローの考え方
など、コンピューターの計算の仕組みが
少し見えてきて面白い分野でした。
引き続き、資格勉強で学んだことは
こうしてブログでアウトプットしていこうと思います。
それでは、今日はこのあたりで。
.png)
#ライタスの日常
#資格勉強
#基本情報技術者
#シフト演算
#学びのアウトプット
.png)
.png)
コメント
コメントを投稿