C/C ++中的按位运算符
在任何编程语言中,运算符都对操作数,变量等执行操作和运算。
在C语言或者C ++语言中,按位运算符在位级别上工作,并且用于对位进行运算和操作。
处理:
按位运算符以位级别对整数执行运算。
输入(整数)将转换为二进制形式,然后对二进制值执行操作。
操作后,获得的二进制值将转换回整数格式并作为结果显示。
C和C ++中按位运算符的类型
操作符 | 功能 |
---|---|
按位AND运算符(&) | 如果两个操作数的位均为1,则运算符返回1。 |
按位或运算符(|) | 如果操作数的任一位为1,则运算符返回1。 |
按位XOR运算符(^) | 如果两个操作数的位彼此相反,则运算符返回1,否则返回0。 |
按位1的补码运算符(〜) | 此运算符将操作数的所有位取反。 |
按位左移运算符(<<) | 此运算符将位向左移位用户提供的偏移量。 |
按位右移运算符(>>) | 该运算符将位向右移位用户提供的偏移量。 |
1.按位与运算符
如果两个位均为1,则运算符的结果为1,否则为0。
语法:
operand1 & operand2
例:
5(十进制)= 00000101(二进制)
4(十进制)= 00000100
5&4 = 00000101&00000100 = 00000100 = 4
结果:5&4 = 4
#include <stdio.h> int main() { int num1 = 5, num2 = 4; int result = num1&num2; printf("num1 & num2 = %d", result); return 0; }
输出:
num1 & num2 = 4
2.按位或者运算符
如果任意一位为1,则运算符将结果输出为1,否则结果为0。
语法:
operand1 | operand2
例:
5(十进制)= 00000101(二进制)
4(十进制)= 00000100(二进制)
5 | 4 = 00000101 | 00000100 = 00000101 = 5
结果:5 | 4 = 00000101 = 5
#include <stdio.h> int main() { int num1 = 5, num2 = 4; int result = num1|num2; printf("num1 | num2 = %d", result); return 0; }
输出:
num1 | num2 = 5
3.按位XOR运算符
如果两个位互不相同/相反,则运算符的结果为1,否则为0。
语法:
operand1 ^ operand2
例:
5(十进制)= 00000101(二进制)
4(十进制)= 00000100(二进制)
5 ^ 4 = 00000101 ^ 00000100 = 00000001 = 1
结果:5 ^ 4 = 00000001 = 1
#include <stdio.h> int main() { int num1 = 5, num2 = 4; int result = num1^num2; printf("num1 ^ num2 = %d", result); return 0; }
输出:
num1 ^ num2 = 1
4.按位左移运算符
该运算符将输入的位向左移动提供的偏移值,并在结果中将空白填充为0。
等效于将数字乘以pow(2,offset),即乘以2可以得到offset的幂。
语法:
operand << offset
例:
5(十进制)= 00000101(二进制)
5 << 2 = 20
#include <stdio.h> int main() { int num = 5; int result = num << 2; printf("num << 2 = %d", result); return 0; }
输出:
num << 2 = 20
5.按位右移运算符
该运算符将输入的位向右移动所提供的偏移值,并在结果中将空白填充为0。
等效于将数字除以pow(2,offset),即除以2会得到偏移的幂。
语法:
operand >> offset
例:
5(十进制)= 00000101(二进制)
5 >> 1 = 2
#include <stdio.h> int main() { int num = 5; int result = num >> 1; printf("num >> 1 = %d", result); return 0; }
输出:
num >> 1 = 2
6.按位1的补码运算符
该运算符对输入执行1的补数。
它将输入的位反转。
输入整数(x)的按位补码将为–(x + 1)。
语法:
~(operand)
例:
输入= 5(十进制)= 00000101(二进制)
~输入=~(00000101)= –(000000101 +1)= –(00000110)= – 6
#include <stdio.h> int main() { int num = 5; int result = ~(num); printf("~num = %d", result); return 0; }
输出:
~num = -6