跳转至

位操作符介绍

参考文章 C++:位操作基础篇之位操作全面总结

0X01位操作基础

基本的位操作符有与、或、异或、取反、左移、右移这6种,它们的运算规则如下所示:

符号| 描述| 运算规则 by MoreWindows -------- | -----| :-----| & | 与|两个位都为1时,结果才为1| | | 或 |两个位都为0时,结果才为0| ^ |异或|两个位相同为0,相异为1 ~ |取反|0变1,1变0 << |左移|各二进位全部左移若干位,高位丢弃,低位补0

|右移|各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

注意以下几点:

1. 在这6种操作符,只有~取反是单目操作符,其它5种都是双目操作符。

2. 位操作只能用于整形数据,对float和double类型进行位操作会被编译器报错。

3. 对于移位操作,在微软的VC6.0和VS2008编译器都是采取算术称位即算术移位操作,算术移位是相对于逻辑移位,它们在右移操作中都一样,低位补0即可,但在左移中逻辑移位的高位补0而算术移位的高位是补符号位。如下面代码会输出-4和3。


0X02位操作实现两个数交换
        static void Main(string[] args)
        {
            int a = 3;
            int b = 4;
            swap(ref a, ref b);
            Console.WriteLine(a + "    " + b);
        }

        static void swap(ref int a,ref int b)
        {
            a = a ^ b;
            b = a ^ b;
            a = a ^ b;
        }