工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C# のビット単位およびビット シフト演算子

C# のビット単位およびビット シフト演算子

このチュートリアルでは、C# のビット単位演算子とビット シフト演算子について詳しく学習します。 C# は、4 つのビット単位および 2 ビットのシフト演算子を提供します。

ビット単位およびビット シフト演算子は、整数 (int、long など) およびブール データに対してビット レベルの演算を実行するために使用されます。これらの演算子は、実際の状況では一般的に使用されません。

さらに詳しく知りたい場合は、ビット演算の実用的なアプリケーションにアクセスしてください。

C# で使用できるビットごとの演算子とビット シフト演算子を以下に示します。

C# ビット演算子のリスト
演算子 オペレーター名
~ ビット単位の補数
& ビットごとの AND
| ビットごとの OR
^ ビットごとの排他的 OR (XOR)
<< ビット単位の左シフト
>> ビットごとの右シフト

ビットごとの OR

ビットごとの OR 演算子は | で表されます . 2 つのオペランドの対応するビットに対してビットごとの OR 演算を実行します。いずれかのビットが 1 の場合 、結果は 1 です .それ以外の場合、結果は 0 です .

オペランドが bool 型の場合 、ビットごとの OR 演算は、それらの間の論理 OR 演算と同等です。

たとえば、

14 = 00001110 (In Binary)
11 = 00001011 (In Binary)

ビット単位の OR 14時から11時までの運行:

00001110
00001011
--------
00001111 = 15 (In Decimal)

例 1:ビットごとの OR

using System;
 
namespace Operator
{
	class BitWiseOR
	{
		public static void Main(string[] args)
		{
			int firstNumber = 14, secondNumber = 11, result;
			result = firstNumber | secondNumber;
			Console.WriteLine("{0} | {1} = {2}", firstNumber, secondNumber, result);
		}
	}
}

プログラムを実行すると、出力は次のようになります:

14 | 11 = 15

ビットごとの AND

ビット単位の AND 演算子は & で表されます . 2 つのオペランドの対応するビットに対してビットごとの AND 演算を実行します。いずれかのビットが 0 の場合 、結果は 0 です .それ以外の場合、結果は 1 です .

オペランドが bool 型の場合 、ビットごとの AND 演算は、それらの間の論理 AND 演算と同等です。

たとえば、

14 = 00001110 (In Binary)
11 = 00001011 (In Binary)

14 と 11 の間のビットごとの AND 演算:

00001110
00001011
--------
00001010 = 10 (In Decimal)

例 2:ビットごとの AND

using System;
 
namespace Operator
{
	class BitWiseAND
	{
		public static void Main(string[] args)
		{
			int firstNumber = 14, secondNumber = 11, result;
			result = firstNumber & secondNumber;
			Console.WriteLine("{0} & {1} = {2}", firstNumber, secondNumber, result);
		}
	}
}

プログラムを実行すると、出力は次のようになります:

14 & 11 = 10

ビット単位の XOR

ビット単位の XOR 演算子は ^ で表されます . 2 つのオペランドの対応するビットに対してビット単位の XOR 演算を実行します。対応するビットが同じの場合 、結果は 0 です .対応するビットが異なる場合 、結果は 1 です .

オペランドが bool 型の場合 、ビットごとの XOR 演算は、それらの間の論理 XOR 演算と同等です。

たとえば、

14 = 00001110 (In Binary)
11 = 00001011 (In Binary)

14 と 11 の間のビット単位の XOR 演算:

00001110
00001011
--------
00000101 = 5 (In Decimal)

Bitwise XOR の使用法について詳しく知りたい場合は、The Magic of XOR をご覧ください

例 3:ビット単位の XOR

using System;
 
namespace Operator
{
	class BitWiseXOR
	{
		public static void Main(string[] args)
		{
			int firstNumber = 14, secondNumber = 11, result;
			result = firstNumber^secondNumber;
			Console.WriteLine("{0} ^ {1} = {2}", firstNumber, secondNumber, result);
		}
	}
}

プログラムを実行すると、出力は次のようになります:

14 ^ 11 = 5

ビット単位の補数

ビット単位の補数演算子は ~ で表されます .これは単項演算子です。つまり、1 つのオペランドのみを操作します。 ~ 演算子 反転 各ビット、つまり 1 を 0 に、0 を 1 に変更します。

たとえば、

26 = 00011010 (In Binary)

26 のビット単位の補数演算:

~ 00011010 = 11100101 = 229 (In Decimal)

例 4:ビット単位の補数

using System;
 
namespace Operator
{
	class BitWiseComplement
	{
		public static void Main(string[] args)
		{
			int number = 26, result;
			result = ~number;
			Console.WriteLine("~{0} = {1}", number, result);
		}
	}
}

プログラムを実行すると、出力は次のようになります:

~26 = -27

-27 を取得しました 229 を期待していたときの出力として . なぜそうなったのですか?

バイナリ値 11100101 が原因で発生します これは 229 であると予想されます 実際には -27 の 2 の補数表現です .コンピューターの負の数は、2 の補数表現で表されます。

整数 n の場合、n の 2 の補数 -(n+1) になります .

2 の補数
10 進数 バイナリ 2 の補数
0 00000000 -(11111111 + 1) =-00000000 =-0 (10 進数)
1 00000001 -(11111110 + 1) =-11111111 =-256 (10 進数)
229 11100101 -(00011010 + 1) =-00011011 =-27

オーバーフロー値は 2 の補数では無視されます。

26 のビットごとの補数 は 229 (10 進数) で、229 の 2 の補数です。 -27 です .したがって、出力は -27 です 229 の代わりに .


ビット単位の左シフト

ビットごとの左シフト演算子は << で表されます . << 演算子は、数値を指定されたビット数だけ左にシフトします。最下位ビットにゼロが追加されます。

10 進数では、

に相当します。
num * 2bits

たとえば、

42 = 101010 (In Binary)

42 でのビット単位のリフト シフト操作:

42 << 1 = 84 (In binary 1010100)
42 << 2 = 168 (In binary 10101000)
42 << 4 = 672 (In binary 1010100000)

例 5:ビット単位の左シフト

using System;
 
namespace Operator
{
	class LeftShift
	{
		public static void Main(string[] args)
		{
			int number = 42;

			Console.WriteLine("{0}<<1 = {1}", number, number<<1);
			Console.WriteLine("{0}<<2 = {1}", number, number<<2);
			Console.WriteLine("{0}<<4 = {1}", number, number<<4);
		}
	}
}

プログラムを実行すると、出力は次のようになります:

42<<1 = 84
42<<2 = 168
42<<4 = 672

ビットごとの右シフト

ビットごとの左シフト演算子は >> で表されます . >> 演算子は、数値を指定されたビット数だけ右にシフトします。第 1 オペランドは、第 2 オペランドで指定されたビット数だけ右にシフトされます。

10 進数では、

に相当します。
floor(num / 2bits)

たとえば、

42 = 101010 (In Binary)

42 でのビット単位のリフト シフト操作:

42 >> 1 = 21 (In binary 010101)
42 >> 2 = 10 (In binary 001010)
42 >> 4 = 2 (In binary 000010)

例 6:ビットごとの右シフト

using System;
 
namespace Operator
{
	class LeftShift
	{
		public static void Main(string[] args)
		{
			int number = 42;

			Console.WriteLine("{0}>>1 = {1}", number, number>>1);
			Console.WriteLine("{0}>>2 = {1}", number, number>>2);
			Console.WriteLine("{0}>>4 = {1}", number, number>>4);
		}
	}
}

プログラムを実行すると、出力は次のようになります:

42>>1 = 21
42>>2 = 10
42>>4 = 2

C言語

  1. C# のキーワードと識別子
  2. C# 演算子
  3. C# のビット単位およびビット シフト演算子
  4. C++ 演算子
  5. C プログラミング演算子
  6. Python 演算子
  7. Java オペレーター
  8. IoTとブロックチェーン–パラダイムシフト
  9. C++ の演算子と例:型とプログラムとは
  10. C のビット演算子:AND、OR、XOR、シフト、補数
  11. Python 演算子:算術、論理、比較、代入、ビット単位、優先順位