首页 > 编程笔记 > C++笔记 阅读:2

C++位运算符的用法(图文并茂,附带实例)

位运算符可对其二进制位进行操作,包括位与“&”、位或“|”、位异或“^”和取反“~”这 4 种运算,如下表所示。

表:C++位运算符
运算符 功能 目数 用法
& 位与 双目 expr1 & expr2
| 位或 双目 expr1 | expr2
^ 位异或 双目 expr1 ^ expr2
~ 取反 单目 ~expr

C++ 中,位运算的对象只能是整型或字符型数据。

在 4 个位运算符中,~ 的优先级是最高的。在 3 个双目运算符中,“&”的优先级最高,“^”次之,“|” 最低。

C++位运算符的运算规则

1) 位与运算

位与运算中,需将操作数转换成二进制表示方式,从低位(最右边)到高位对齐,逐位求与。若两个操作数对象同一位都为 1,则结果对应位为 1,否则结果对应位为 0。

例如,12 和 8 位与运算后得到的结果是 8:

#include <iostream>
using namespace std;

int main(){
    cout << (12&8) << endl;
    return 0;
}
运行结果为:

8

2) 位或运算

位或运算中,需将操作数转换成二进制表示方式,从低位(最右边)到高位对齐,逐位求或。若两个操作数对象同一位都为 0,则结果对应位为 0,否则结果对应位为 1。

例如,4 和 8位或运算后得到的结果是 12:

#include <iostream>
using namespace std;

int main(){
    cout << (4|8) << endl;
    return 0;
}
运行结果为:

12

3) 位异或运算

位异或运算中,需将操作数转换成二进制表示方式,从低位(最右边)到高位对齐,逐位求异或。若两个操作数对象同一位不相同,则结果对应位为 1,否则结果中对应位为 0。

例如,31 和 22 位异或运算后得到的结果是 9:

#include <iostream>
using namespace std;

int main(){
    int n = 31^22;
    cout << n << endl;
    return 0;
}
运行结果为:

9

4) 取反运算

取反运算符 ~ 为单目运算符,右结合性,作用是对参与运算的二进制位取反。例如 ~1 为 0,~0 为 1,这和逻辑运算中的 ! 非常类似。

例如,~9 可以转换为如下的运算:
~ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001  (9 在内存中的存储)
-----------------------------------------------------------------------------------
   1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0110  (-10 在内存中的存储)
所以 ~9 的结果为 -10。

例如,~-9 可以转换为如下的运算:
~ 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111  (-9 在内存中的存储)
-----------------------------------------------------------------------------------
   0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1000  (8 在内存中的存储)
所以 ~-9 的结果为 8。
#include <iostream>
using namespace std;

int main(){
    cout << ~9 << endl;
    return 0;
}
运行结果为:

-10

相关文章