最近在刷位运算的题目,经常用的位运算还比较熟悉,但对于左移、右移运算符和其应用实践有待学习。这里统一总结一下C++的位运算。
学习整理自此链接处
1.总表
运算符 | 名称 | 作用 |
---|---|---|
& | 按位与 | 两个操作数同时为1,结果为1 |
| | 按位或 | 两个操作数只要有一个为1,结果为1 |
~ | 按位非 | 按位取反,操作数为1,结果为0;操作数为0,结果为1 |
^ | 按位异或 | 两个操作数相同,结果为0;两个操作数不同,结果为1 |
<< | 左移 | 右侧空位补0,左移一位相当于将原数扩大两倍 |
>> | 右移 | 左侧空位补符号位,右移一位相当于将原数缩小两倍 |
注:以上操作符都是位运算符,是对位进行操作的。如果我们用十进制3&5,则电脑在处理时会将十进制数转换成机器语言(二进制),并且二进制数在内存中一般是8位位一个字节进行存储的。所以结果应该是3和7的二进制按位与后的结果
2.按位与
按位与运算示例 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
3 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
7 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
结果返回十进制数3 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
同样,按位或、异或、非,等都可以通过这种方式进行计算。
按位与用途
1.清零
若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:原来的数中为1的位,新数中相应位为0。然后使二者进行&am