C 语言位运算符

1 Aug 2025 | 9 分钟阅读

在C编程语言中,位运算符是用于在数据位级别上执行操作的运算符。当我们执行位运算时,也称为位级编程。它由两个数字组成,即0或1。它主要用于数值计算,以加快计算速度。

C语言位运算符的类型

在C编程语言中,我们有不同类型的位运算符。以下是位运算符的列表:

运算符符号运算符名称
&按位与运算符
|按位或运算符
^按位异或运算符
~一的补码运算符(一元运算符)
<<左移运算符
>>右移运算符

在这里,我们将逐一讨论所有运算符。

C语言中的按位与运算符 (&)

在C编程语言中,按位与运算符用单个“&”符号表示。整数运算数写在“&”运算符的两侧,然后它会比较给定整数的每一位。如果两个运算数的相应位都为1,则输出为1;否则,输出为0。

按位与运算符的真值表

按位与运算符根据C中的以下真值表执行其操作。

XYX&Y
000
010
100
111

例如

我们取两个变量a和b,并将它们初始化为6和14。给定变量的二进制表示如下:

现在,

当我们对以上两个变量应用按位与操作(即a&b)时,输出为0110。

按位与运算符示例

让我们通过一个例子来说明C中的按位与运算符。

示例

编译并运行

输出

The output of the Bitwise AND operator a&b is 6 

说明

在此示例中,我们创建了两个变量,即a和b。a和b的值分别为6和14。a和b的二进制值分别为0110和1110。之后,我们对这两个变量应用AND运算符,其输出a & b为6(0110)。

C语言中的按位或运算符 (|)

在C编程语言中,按位或运算符用单个竖线“|”表示。整数运算数写在“|”符号的两侧,然后它会比较给定整数的每一位。如果任一运算数的位值为1,则输出为1;否则,它将返回0。

按位或运算符的真值表

按位或运算符根据C中的以下真值表执行其操作。

XYX|Y
000
011
101
111

例如

我们取两个变量a和b,并将它们初始化为23和10。给定变量的二进制表示如下:

现在,

当我们对以上两个变量应用按位或运算符(即a|b)时,输出为0001 1111。

C语言中的按位或运算符 (|) 示例

让我们通过一个例子来说明C中的按位或运算符。

示例

编译并运行

输出

The output of the Bitwise OR operator a|b is 31 

说明

在此示例中,我们取了两个变量a和b,并将它们初始化为23和10。a和b的二进制值分别为0001 0111和0000 1010。之后,我们对这两个变量应用AND运算符,其输出a & b为31(0001 1111)。

C语言中的按位异或运算符 (^)

在C编程语言中,按位异或运算符用“^”符号表示。运算数写在异或运算符的两侧,然后它会比较给定整数的每一位。如果任一运算数的相应位为1,则输出为1;否则,它将返回0。

按位异或运算符的真值表

按位异或运算符根据C中的以下真值表执行其操作。

XYX^Y
000
011
101
110

例如

我们取两个变量a和b,并将它们初始化为12和10。给定变量的二进制表示如下:

现在,

当我们对以上两个变量应用按位异或运算符(a^b)时,结果将是0000 0110。

C语言中的按位异或运算符示例

让我们通过一个例子来说明C中的按位异或运算符。

示例

编译并运行

输出

The output of the Bitwise exclusive OR operator a^b is 6 

说明

在此示例中,我们取了两个变量a和b,并将它们初始化为12和10。之后,我们使用给定运算数之间的二进制异或运算符,然后使用printf()函数打印输出。

C语言中的按位取反运算符 (~)

按位取反运算符也称为一的补码运算符。它用波浪号“~”符号表示。它只接受一个运算数或变量,并对运算数执行取反操作。当我们对任何位应用取反操作时,0变成1,1变成0。

按位取反运算符的真值表

按位取反运算符根据C中的以下真值表执行其操作。

x~x
01
10

例如

我们取一个变量a,然后将其初始化为8。给定变量a的二进制表示为0000 1000。如果我们使用按位取反运算符进行操作,则如下所示:

当我们对运算数应用按位取反运算符时,输出将是1111 0111。

C语言中的按位取反运算符示例

让我们通过一个例子来说明C中的按位取反运算符。

示例

编译并运行

输出

The output of the Bitwise complement operator ~a is -9 

说明

在此示例中,我们演示了按位取反(~)运算符。在这里,我们取了一个值为8的变量。之后,我们使用~(波浪号)运算符,该运算符反转数字的所有位,将8(二进制0000 1000)转换为1111 0111,表示2的补码中的-9。最后,它使用printf()函数打印该值。

C语言中的按位移位运算符 (>> <<)

在C编程语言中,按位移位运算符用于将位向左或向右移动。因此,我们可以说按位移位运算符分为两类:

  • 左移运算符
  • 右移运算符

现在,我们将逐一讨论这些移位运算符。

左移运算符 (<<)

左移运算符是将位数向左移动的运算符。

语法

它具有以下语法:

在这个语法中,

  • 运算数是我们对其应用左移操作的整数表达式。
  • n是要移位的位数。

在左移运算符的情况下,将向左移动'n'位。左侧的'n'位将被弹出,右侧的'n'位将用0填充。

例如

假设我们有一个语句:

上面变量的二进制表示如下:

如果我们想将上述表示左移2位,则语句将是:

左移运算符示例

让我们通过一个例子来说明C中的左移运算符。

示例

编译并运行

输出

The value of a<<2 is : 20    

说明

在此示例中,我们演示了C中的左移运算符。首先,我们取了一个变量(a)并将其初始化为5。之后,我们使用左移运算符将整数a的位向左移动两位。5的二进制数(0101)变为(10100),在十进制中表示20。因此,a<<2打印结果20。

右移运算符 (>>)

在C编程语言中,右移运算符(>>)是将位向右移动的运算符。每次移位将数字除以2。

语法

它具有以下语法:

在这个语法中,

  • 运算数是我们对其应用右移操作的整数表达式。
  • n是要移位的位数。

在右移运算符的情况下,将向右移动'n'位。右侧的'n'位将被弹出,左侧的'n'位将用0填充。

例如

假设我们有一个语句:

上述变量的二进制表示将是:

如果我们想将上述表示右移2位,则语句将是:

右移运算符示例

让我们通过一个例子来说明C中的右移运算符。

示例

编译并运行

输出

The value of a>>2 is : 1 

说明

在此示例中,我们将演示C中的右移运算符。首先,我们取了一个变量并将其初始化为7。之后,我们使用右移(>>)运算符将整数a的位向右移动两位。7的二进制数(0111)变为1(0001)。因此,a>>2打印结果1。

位运算符常见问题解答

1) C语言中的位运算符是什么?

在C编程语言中,位运算符用于直接在二进制表示上执行操作。它们在位级别上工作。这些运算符可用于底层编程、图形、设备控制等。

2) 我们可以在C中使用浮点数或双精度类型进行位运算吗?

不,位运算符只能用于整数类型,如int、short、char和long。这些运算符不用于浮点数或双精度类型。

3) C语言中的按位与(&)运算符如何工作?

在C中,按位与运算符(&)比较两个数字的每一位。如果两个运算数的相应位都为1,则输出为1;否则,输出为0。

4) C语言中的逻辑运算符和位运算符的主要区别是什么?

在C中,逻辑运算符和位运算符的主要区别在于,逻辑运算符使用布尔值来评估完整的表达式。另一方面,位运算符作用于整数值的单个位。

5) C语言中右移(>>)运算符的用途是什么?

在C中,右移运算符(>>)是将位数向右移动的运算符。每次移位将数字除以2。