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で割った値(切り捨て)が得られます。シフト演算は乗除算よりも高速に処理できる場合があるため、パフォーマンスが重視される場面で活用されるテクニックです。
-
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)です。これに
-
Pythonで数値が正・負・ゼロのどれかを判定する方法をわかりやすく解説
Pythonでは、ユーザーから入力を受け取った数値が正の数(プラス)、負の数(マイナス)、ゼロのどれに該当するかを、条件分岐を使って簡単に判定できます。この記事では、代表的な2つの実装方法——if-elif-else文を使う方法と、ネスト(入れ子)構造のif文を使う方法——をコード例とともに紹介します。方法1:if-elif-else文を使う最もシンプルで読みやすいのが、if-elif-else文による三択分岐です。条件は上から順に評価され、最初に真(True)になったブロックだけが実行されます。num = float(input(数値を入力してください: )) if num > 0: