参考文章
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;
}