C++中的位运算:与(&)、或(|)、非(~)异或(^)、左移、右移
作者:野牛程序员:2023-02-24 10:36:32C++程序设计阅读 2687
C++ 中的位运算符包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)等。
按位与(&):将两个数的二进制表示进行按位与运算,得到的结果是两个数的对应二进制位上的值均为1时才为1,否则为0。例如:
unsigned int a = 0b1100; // a 的值为 12 unsigned int b = 0b1010; // b 的值为 10 unsigned int c = a & b; // c 的值为 0b1000,即 8
按位或(|):将两个数的二进制表示进行按位或运算,得到的结果是两个数的对应二进制位上的值只要有一个为1就为1,否则为0。例如:
unsigned int a = 0b1100; // a 的值为 12 unsigned int b = 0b1010; // b 的值为 10 unsigned int c = a | b; // c 的值为 0b1110,即 14
按位异或(^):将两个数的二进制表示进行按位异或运算,得到的结果是两个数的对应二进制位上的值不同才为1,否则为0。例如:
unsigned int a = 0b1100; // a 的值为 12 unsigned int b = 0b1010; // b 的值为 10 unsigned int c = a ^ b; // c 的值为 0b0110,即 6
按位取反(~):对一个数的二进制表示进行按位取反运算,得到的结果是将每一位上的0变为1,1变为0。例如:
unsigned int a = 0b1100; // a 的值为 12 unsigned int b = ~a; // b 的值为 0b...0011 (和机器相关的整数位数)
左移(<<):将一个数的二进制表示向左移动指定的位数,得到的结果是在数的末尾补上指定数量的0。例如:
unsigned int a = 0b0001; // a 的值为 1 unsigned int b = a << 2; // b 的值为 0b0100,即 4
右移(>>):将一个数的二进制表示向右移动指定的位数,得到的结果是将数的末尾的指定数量的位数移除,对于无符号数,在左侧插入0。例如:
unsigned int a = 0b1100; // a 的值为 12 unsigned int b = a >> 2; // b 的值为 0b0011,即 3
需要注意的是,位运算符只能作用于整数类型,不能作用于浮点数类型或者其他非整数类型。此外,位运算符的优先级较低,如果与其他运算符混合使用,需要使用括号来明确优先级。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
