C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でビット演算子(左シフト)を使って数値を2倍にする方法を解説

C#では、ビット演算子を利用することで、掛け算の演算子を使わずに数値を2倍にすることができます。具体的には、左シフト演算子(<<)を使用して、数値のビットを1桁分だけ左にシフトします。これにより、元の数値の2倍の値が得られます。

なぜ左シフトで2倍になるのかというと、2進数において1桁左にずれることは10進数における「×10」と同じ原理だからです。たとえば、25(2進数:11001)を1ビット左にシフトすると110010となり、これは50を表します。

以下に、ビット演算子を使って数値を2倍にするプログラムの例を示します。

サンプルコード

using System;
namespace BitwiseDemo {
   class Example {
      static void Main(string[] args) {
         int num = 25, result;
         result = num << 1;
         Console.WriteLine("The original number is: {0}", num);
         Console.WriteLine("The number multiplied by two is: {0}", result);
      }
   }
}

実行結果

上記プログラムを実行すると、次のような出力が得られます。

The original number is: 25
The number multiplied by two is: 50

プログラムの解説

それでは、上記のプログラムの流れを順番に見ていきましょう。

まず、元となる整数 num を25として定義し、結果を格納するための変数 result も同時に宣言しています。次に、左シフト演算子「<<」を使って num のビットを1桁分だけ左へシフトし、その結果(元の値の2倍である50)を result に代入しています。最後に、num と result の値をそれぞれコンソールに出力して表示しています。

該当するコード部分を抜粋すると、以下のようになります。

int num = 25, result;
result = num << 1;
Console.WriteLine("The original number is: {0}", num);
Console.WriteLine("The number multiplied by two is: {0}", result);

補足:右シフトとの対比

逆に、右シフト演算子(>>)を使ってビットを1桁分右にシフトすると、数値を2で割った値(切り捨て)が得られます。シフト演算は乗除算よりも高速に処理できる場合があるため、パフォーマンスが重視される場面で活用されるテクニックです。

  1. Pythonで16ビットのビット反転(補数)を取得する方法

    数値の下位16ビットだけを反転(ビットごとの補数を取得)したい場合は、その数値と 65535(2進数で16個すべてが1の値)とのXOR演算を行います。XOR演算では、相手側のビットが1の場合に元のビットが反転されるため、65535とのXORを取ることで、ちょうど16ビット分だけを効率的に反転できます。それより上位のビットには影響しません。サンプルコードa = 3 # 2進数では 11 b = a ^ 65535 print(bin(b))実行結果このコードを実行すると、次の出力が得られます。0b1111111111111100解説上記の例では、変数 a の値は3(2進数で 11)です。これに

  2. Pythonで数値が正・負・ゼロのどれかを判定する方法をわかりやすく解説

    Pythonでは、ユーザーから入力を受け取った数値が正の数(プラス)、負の数(マイナス)、ゼロのどれに該当するかを、条件分岐を使って簡単に判定できます。この記事では、代表的な2つの実装方法——if-elif-else文を使う方法と、ネスト(入れ子)構造のif文を使う方法——をコード例とともに紹介します。方法1:if-elif-else文を使う最もシンプルで読みやすいのが、if-elif-else文による三択分岐です。条件は上から順に評価され、最初に真(True)になったブロックだけが実行されます。num = float(input(数値を入力してください: )) if num > 0: