C#の左シフト演算子(<<)と右シフト演算子(>>)の使い方を解説
C#には、ビット単位でデータを操作するための「シフト演算子」が用意されています。代表的なものが左シフト演算子(<<)と右シフト演算子(>>)です。この記事では、それぞれの仕組みと具体的な使い方をサンプルコードとともに解説します。
左シフト演算子(<<)とは
左シフト演算子は、左側のオペランドの値を、右側のオペランドが指定したビット数だけ左に移動させる演算子です。
ビットが左にずれると、空いた下位ビットには0が埋められます。2進数では1桁左にずれるごとに値が2倍になるため、左シフトは「2のn乗倍」の計算としても利用できます。
右シフト演算子(>>)とは
右シフト演算子は、その逆で、左側のオペランドの値を、右側のオペランドが指定したビット数だけ右に移動させる演算子です。
符号付き整数の場合、最上位ビット(符号ビット)の値が空いた上位ビットにコピーされます。1桁右にずれるごとに値が半分になるため、「2のn乗で割る」処理に相当します。
サンプルコード
以下は、左シフトと右シフトの両方を使ったC#のサンプルプログラムです。
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a << 2; /* 240 = 1111 0000 */
Console.WriteLine("Value of c is {0}", c);
c = a >> 2; /* 15 = 0000 1111 */
Console.WriteLine("Value of c is {0}", c);
Console.ReadLine();
}
}
}
実行結果
Value of c is 240 Value of c is 15
コードの解説
変数 a の初期値は60で、2進数では 0011 1100 と表されます。
a << 2:60を2ビット左にシフトすると1111 0000、つまり10進数の 240 になります(60 × 4 = 240)。a >> 2:60を2ビット右にシフトすると0000 1111、つまり10進数の 15 になります(60 ÷ 4 = 15)。
このように、シフト演算子を使うと乗算・除算を高速に行えるほか、フラグ管理やビットマスク処理など、低レベルなデータ操作にも活用できます。
-
C言語の演算子とパンクチュエータ(区切り子)とは?違いと一覧をわかりやすく解説
演算子(Operator)とはC言語における演算子とは、1つまたは複数のオブジェクトに対して適用される操作を表すための記号です。主に式の中で意味を持ちますが、宣言の中でも使用されることがあります。一般的には、英数字以外の文字を組み合わせた短い記号列として表現されます。例えば、加算を表す「+」、等価比較を行う「==」、論理ANDを表す「&&」などが演算子に該当します。パンクチュエータ(Punctuator)とはパンクチュエータ(区切り子)とは、要素のリストを区切ったり、構文上の区切りを終了させたりするために使用される記号です。セミコロン「;」やカンマ「,」などが代表的な例です。C言語の演算子・パ
-
C言語の演算子と式の種類を徹底解説!算術からビット演算まで
C言語における演算子(オペレーター)とは、データに対して何らかの操作を行うための記号です。C言語の演算子は、その機能によって以下のように分類されます。算術演算子関係演算子論理演算子代入演算子インクリメント・デクリメント演算子ビット演算子条件演算子特殊演算子それぞれの演算子について、具体例とサンプルプログラムを交えながら詳しく見ていきましょう。1. 算術演算子算術演算子は、足し算や引き算などの数値計算を行うために使われます。演算子説明例a=20, b=10 の場合結果+加算(足し算)a+b20+1030-減算(引き算)a-b20-1010*乗算(掛け算)a*b20*10200/除算(割り算)a/