亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C# 位和位移运算符

C# 位和位移运算符

在本教程中,我们将详细了解 C# 中的按位和位移运算符。 C# 提供了 4 个按位运算符和 2 个位移位运算符。

位和位移运算符用于对整数(int、long 等)和布尔数据执行位级操作。这些运算符在现实生活中并不常用。

如果您有兴趣探索更多,请访问按位运算的实际应用。

下面列出了 C# 中可用的按位和位移运算符。

C# 位运算符列表
运算符 运营商名称
~ 按位补码
& 按位与
| 按位或
^ 按位异或(XOR)
<< 按位左移
>> 按位右移

按位或

按位或运算符由 | 表示 .它对两个操作数的相应位执行按位或运算。如果任一位是 1 ,结果是 1 .否则结果为 0 .

如果操作数的类型是 bool ,按位或运算等价于它们之间的逻辑或运算。

例如,

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

按位 OR 14点到11点之间的操作:

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

示例 1:按位或

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

按位与

按位与运算符由 & 表示 .它对两个操作数的相应位执行按位与运算。如果任一位是 0 ,结果为 0 .否则结果为 1 .

如果操作数的类型是 bool ,按位与运算等价于它们之间的逻辑与运算。

例如,

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

14和11之间的按位与运算:

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

示例 2:按位与

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

按位异或

按位异或运算符由 ^ 表示 .它对两个操作数的相应位执行按位异或运算。如果对应的位相同 ,结果为 0 .如果对应的位不同 ,结果为 1 .

如果操作数的类型是 bool ,按位异或运算等价于它们之间的逻辑异或运算。

例如,

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

14和11之间的按位异或运算:

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

如果您想了解更多有关按位异或的用法,请访问异或的魔力

示例 3:按位异或

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 变为 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 的补码
十进制 二进制 2 的补码
0 00000000 -(11111111 + 1) =-00000000 =-0(十进制)
1 00000001 -(11111110 + 1) =-11111111 =-256(十进制)
229 11100101 -(00011010 + 1) =-00011011 =-27

溢出值在 2 的补码中被忽略。

26 的按位补码 是 229(十进制)和 229 的 2 的补码 是 -27 .因此输出是 -27 而不是 229 .


按位左移

按位左移运算符由 << 表示 . << 运算符将数字向左移动指定的位数。将零添加到最低有效位。

十进制相当于

num * 2bits

例如,

42 = 101010 (In Binary)

42上的Bitwise Lift Shift操作:

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

按位右移

按位左移运算符由 >> 表示 . >> 运算符将数字向右移动指定的位数。第一个操作数右移第二个操作数指定的位数。

十进制相当于

floor(num / 2bits)

例如,

42 = 101010 (In Binary)

42上的Bitwise Lift Shift操作:

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. 物联网和区块链——范式转变
  9. C++ 中的运算符示例:什么是、类型和程序
  10. C 中的位运算符:AND、OR、XOR、移位和补码
  11. Python 运算符:算术、逻辑、比较、赋值、按位和优先级
  12. C - 常量和文字