|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
C++ 位运算
1. 位运算概念
位运算是 C++ 中的基本运算之一。即便是这样,大多数编程人员都很少使用位运算。
所有数据在计算机中都是按二进制存储的,例如 01100011。
一个数据可以看做是一个有序的位集合,比如 01100011 就是由 8 个位组成的。每个位的状态要么是 0,要么是 1。
位运算允许操作数据的某一特定位,比如说将某位设置为 1 或 0。
位运算由位运算操作符和操作数组成,不同的位运算操作符定义了不同的位运算。
2. 位运算操作符
位运算操作符非常多,常见的有:按位非、左移、右移、按位与、按位或、按位异或。
按位非
符号:~
用法:~a
含义:翻转数 a 的每一位,把 1 变成 0,把 0 变成 1。例如,二进制数 00010110 按位非的结果是 11101001。
左移
符号:<<
用法:a << n
含义:将数 a 向左移动 n 位,右边的位补 0。例如,二进制数 101001 左移的结果是 1010010,10100.1 左移的结果是 101001。
将数 a 左移一位相当于把 a 乘以 2,将数 a 左移 n 位相当于将数 a 乘以 2n。
注意:左移操作如果超出数据范围,则移到外面的数会被丢弃。
右移
符号:>>
用法:a >> n
含义:将数 a 向右移动 n 位(与左移相反),左边的位补 0,因此右移 n 为相当于除以 2n。例如二进制数 101001 右移的结果是 10100.1。
注意:和左移一样,右移操作如果超出数据范围,则移到外面的数会被丢弃。
按位与
符号:&(和取址符的符号一样)
用法:a & b
含义:在每一位所在处,如果 a 和 b 都含有 1,那么该位的结果为 1,否则为 0。例如,二进制数 1010 & 1100 等于 1000。
按位或
符号:|
用法:a | b
含义:在每一位所在处,如果 a 和 b 都含有 0,那么该位的结果为 0,否则为 1。例如,二进制数 1010 | 1100 等于 1110。
按位异或
符号:^
用法:a ^ b
含义:在每一位所在处,如果 a 和 b 不相同,那么该位的结果为 1,否则为 0(同 0 异 1)。例如,1010 ^ 1100 等于 0110。
3. 位操作
说明:下面的 n 从 0 开始。
1. 将 a 的第 n 位设置为 1
2. 将 a 的第 n 位设置为 0
3. 判断 a 的第 n 位是否为 1
4. 翻转 a 的第 n 位(如果是 0 则改为 1,反之改为 0)
|
|