【ライタスの日常】資格勉強で学んだ「シフト演算」の話
こんにちは。 ライタスの営業担当・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 が入ります。 ただし、 符号ビットと異なる値がはみ出した場合 これを オーバーフローと判断します。 算術シフト(右) 算術右シフトでは、 空いたスペースに 符号ビットと同じ値を入れます つまり、 ...