C/C ++中的按位运算符

时间:2020-02-23 14:41:15  来源:igfitidea点击:

在任何编程语言中,运算符都对操作数,变量等执行操作和运算。
在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