在学习编程时,使用二进制值一直是一个需要理解的重要概念,因为计算机使用0和1。现在,许多人可能已经错过了它的学习,因为他们是使用Blocks、Scratch,甚至可能是使用JavaScript开始学习编程的。
在C# 7中,由于使用数字分隔符和二进制字面量,因此二进制值的处理比以前更容易。二进制运算符从C#的第一个版本就开始有了,下面将介绍它们。
首先,使用二进制运算符的简单计算开始。方法SimpleCalculations首先使用二进制值(二进制字面量和数字分隔符)声明并初始化变量binary1和binary2。使用&运算符,两个值用二进制AND运算符合并起来,并写入变量binaryAnd。然后,使用运算符 | 创建binaryOr变量,使用运算符 ^ 创建binaryXOR变量,使用运算符 ~ 创建reversel变量:
public static void SimpleCalculations(){
System.Console.WriteLine(nameof(SimpleCalculations));
uint binary1 = 0b1111_0000_1100_0011_1110_0001_0001_1000;
uint binary2 = 0b0000_1111_1100_0011_0101_1010_1110_0111;
uint binaryAnd = binary1 & binary2;
DisplayBits("AND",binaryAnd,binary1,binary2);
uint binaryOR = binary1 | binary2;
DisplayBits("OR",binaryOR,binary1,binary2);
uint binaryXOR = binary1 ^ binary2;
DisplayBits("XOR",binaryXOR,binary1,binary2);
uint reverse1 = ~binary1;
DisplayBits("NOT",reverse1,binary1);
}
要以二进制形式显示uni和int变量,需要创建扩展方法ToBinaryString。Convert.ToString提供的一个重载带有两个int参数,其中第二个int值是toBase参数。使用这个方法,可以通过传递值2、八进制(8)、十进制(10)和十六进制(16)来格式化输出字符串binary。默认情况下,如果二进制值以0开始,这些0值将被忽略,而不会打印出来。PadLeft方法填充字符串中的这些0值。字符串需要的字符数由sizeof运算符计算,并左移4位。如前所述,sizeof运算符返回指定类型的字节数。要显示这些位,需要将字节数乘以8,这相当于像左移动3位。另一个扩展方法是AddSeparators,它使用LINQ方法在每四位数之后添加_分隔符:
private static string ToBinaryString(this uint number) =>
Convert.ToString(number, toBase: 2).PadLeft(sizeof(uint) << 3, '0');
private static string ToBinaryString(this int number) =>
Convert.ToString(number, toBase: 2).PadLeft(sizeof(int) << 3, '0');
private static string AddSeparators(this string number) =>
string.Join('_', Enumerable.Range(0, number.Length / 4)
.Select(i => number.Substring(i * 4, 4)).ToArray());
方法DisplayBits是从前面显示的SimpleCalculations方法调用的,它使用ToBinaryString和AddSeparators扩展方法。在这里,将显示用于操作的操作数,以及结果: