2.6.3 位运算
位运算主要是指二进制位之间的运算,在程序中有五种常用的运算方式。
(1)按位与。运算符为&,将两个数的二进制位分别进行与运算,必须二者同时为真时,结果才是真(1),否则为假(0)。如001与101进行按位与运算,从高位看起,001的第一位为0,101的第一位为1,它们没有同时为真,所以结果为0;第二位是0和0进行与运算,因为二者均为假,所以结果为0;第三位是1和1进行与运算,因为二者同时为真,所以结果为1。最后的结果是001 & 101 = 001。运算过程如图2-11所示。
(2)按位或。运算符为|(管道符号),将两个数的每个二进制位进行或运算,只要有一个是真(1),结果就为真(1)。如100和011进行按位或运算,从高位开始,100的第一位是1,011的第一位为0,因为有一个为真,所以结果为真;第二位是0和1进行或运算,同理有一个为真,所以结果为真;第三位是0和1进行或运算,其结果为1。最后的结果为111。运算过程如图2-12所示。
图2-11 按位与的运算过程
图2-12 按位或的运算过程
(3)左移。运算符为<<,即把某个数的二进制位都向左移动若干位。如00011 << 2,就是把00011的所有位向左移动2位,即01100。
(4)右移。运算符为>>,即把某个数的二进制位都向右移动若干位,如10010000 >> 4,就是把所有位都右移4位,所以后面的四个0就去掉了,变为1001。
(5)异或。运算符为^,即把两个数中对应的二进制位进行异或运算。异或运算是两个操作数中只有一个为真(1)时才为真(1),否则为假(0)。例如0101 ^ 0011,从高位起,从左到右,第一位是0与0进行异或,二者都不为真,所以结果为0;第二位是1和0异或,因为是一真一假,所以结果为1;第三位是0和1异或,也是一真一假,所以结果也为1;第四位是1和1异或,因为两者都为1,不为真,所以结果为0。最后的结果为0110。
以下代码演示了位运算符的使用方法,完整的示例代码请参考\第2章\Example_10。
图2-13 位运算输出结果
上面代码分别演示了按位与、按位或、按位左移及按位右移四种运算。这里使用Convert.ToString方法的作用是把十进制的数值输出为二进制字符串形式,好处是方便读者观察它们的运算结果。屏幕输出内容如图2-13所示。