按位 OperaC 语言中的运算符:AND、OR、XOR、 Shift & 补充

⚡ 智能摘要

C 语言中的位运算符在单个位级别操作数据,使用 AND、OR、XOR、取反和移位操作对整数操作数进行运算,以执行更快的计算、打包标志以及在底层和嵌入式编程中控制硬件。

  • 🧮 Opera目的: 六个运算符——与(&)、或(|)、异或(^)、取反(~)、左移(<<)、右移(>>)——逐位作用。
  • 🔗 AND & OR: & 的结果只有在两个位都为 1 时才为 1;| 的结果在任一位为 1 时为 1。
  • 🔀 异或: 当只有一个比特为 1 时,^ 结果为 1,这便于切换比特位和交换数据。ping 值。
  • ↔️ Shifts: << 和 >> 运算符将位向左或向右滑动,乘以或除以 2 的幂。
  • 🔁 补充: ~ 运算符会翻转每一位,因此 0000 1111 变为 1111 0000。
  • 🤖 人工智能帮助: AI 助手和 GitHub Copilot 可以快速生成和解释位掩码和移位逻辑。

按位 OperaC 中的 tors

什么是按位 Opera托尔斯?

按位 Opera位运算用于在位级别操作数据,也称为位级编程。位运算对一个或多个位模式或二进制数字的各个位进行操作。它们用于数值计算,以加快计算过程。

以下是“C”编程语言提供的位运算符列表:

Opera器
& 按位与运算符
| 按位或运算符
^ 按位排他或运算符
~ 二进制补码 Operator 是一元运算符
<< 左移运算符
>> 右移运算符

位运算符不能直接应用于基本数据类型,例如 float、double 等。请始终记住,位运算符主要用于…… 整数数据类型 因为它具有兼容性。

按位逻辑运算符逐位对数据进行操作,从最低有效位(即最右边的位 LSB 位)开始,向最左边的位 MSB(最高有效位)进行操作。

按位逻辑运算符的计算结果如下表所示。

x y x & y × | 是 x^y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

按位与

这是最常用的逻辑位运算符之一。它用一个与号 (&) 表示。(&) 运算符的两边各写两个整数表达式。
如果两位的值都为 1,则按位与运算的结果为 1;否则,结果始终为 0。

假设我们有两个变量 op2 和 op1,其值如下:

Op1 = 0000 1101
Op2 = 0001 1001

对变量 op1 和 op2 进行 AND 运算的结果为

Result = 0000 1001

我们可以看到,两个变量是逐位比较的。只要两个变量中某个位的值都是 1,则结果为 1,否则为 0。

按位或

它用一个竖线符号 (|) 表示。(|) 运算符的两边各写两个整数表达式。

如果表达式中至少有一个值为 1,则按位或运算的结果为 1;否则,结果始终为 0。

假设我们有两个变量 op2 和 op1,其值如下:

Op1 = 0000 1101
Op2 = 0001 1001

对变量 op1 和 op2 进行或运算的结果为

Result = 0001 1101

我们可以看到,两个变量是逐位比较的。只要其中一个变量中某个位的值为 1,则结果为 1,否则为 0。

按位异或

它用符号(^)表示。(^)运算符两边各写两个整数表达式。

按位排他或运算的结果,只要表达式中只有一个值为 1,则为 1;否则,结果始终为 0。

假设我们有两个变量 op2 和 op1,其值如下:

Op1 = 0000 1101
Op2 = 0001 1001

对变量 op1 和 op2 进行异或运算的结果为

Result = 0001 0100

我们可以看到,两个变量逐位进行比较。只要一个变量的值为 1,则结果为 0,否则结果为 0。

让我们编写一个简单的程序来演示按位逻辑运算符。

#include <stdio.h>
int main() 
{
int a = 20;	/* 20 = 010100 */  
int b = 21;	/* 21 = 010101 */
int c = 0;           

c = a & b;       /* 20 = 010100 */ 
printf("AND - Value of c is %d\n", c );

c = a | b;       /* 21 = 010101 */
printf("OR - Value of c is %d\n", c );

c = a ^ b;       /* 1 = 0001 */
printf("Exclusive-OR - Value of c is %d\n", c );

getch();
}

输出:

AND - Value of c is 20
OR - Value of c is 21
Exclusive-OR - Value of c is 1

按位移位运算符

位移运算符用于将位模式向左或向右移动/移位。C 语言提供了两种移位运算符:左移和右移,它们表示如下:

Operand << n (Left Shift)
Operand >> n (Right Shift)

在这里,

  • 操作数是一个整数表达式,我们必须对其执行移位运算。
  • “n”是我们必须在整数表达式中移动的位数总数。

左移运算会将 'n' 位向左移动。表达式中最左边的位将被弹出,而右侧将填充 n 位 0。

右移运算会将‘n’位向右移动。表达式中最右边的‘n’位将被弹出,而左侧将填充值0。

例如:x 为整数表达式,数据为 1111,移位运算后结果为:

x << 2 (left shift) = 1111<<2 = 1100
x>>2 (right shift) = 1111>>2 = 0011

Shifts 运算符可以组合使用,然后可用于 extrac从整数表达式中提取数据。让我们编写一个程序来演示位移运算符的用法。

#include <stdio.h>
int main() {
int a = 20;	/* 20 = 010100 */  
int c = 0;           

c = a << 2;	/* 80 = 101000 */
printf("Left shift - Value of c is %d\n", c );

c = a >> 2;	/*05 = 000101 */
printf("Right shift - Value of c is %d\n", c );
return 0;
}

输出:

Left shift - Value of c is 80
Right shift - Value of c is 5

执行左移运算后,该值将变为 80,其二进制等效为 101000。

经过右移运算后,该值将变为 5,其二进制值为 000101。

按位补码运算符

按位补码也称为“1 的补码”运算符,因为它始终只接受一个值或一个操作数。它是一个一元运算符。

当我们对任何位执行补码时,所有的 1 都会变成 0,反之亦然。

如果我们有一个包含 0000 1111 的整数表达式,那么执行按位补码运算后,该值将变为 1111 0000。

按位补码运算符用符号波浪号 (~) 表示。

让我们编写一个程序来演示按位补码运算符的实现。

#include <stdio.h>
int main() {
int a = 10;	/* 10 = 1010 */  
int c = 0;           
c = ~(a);      
printf("Complement - Value of c is %d\n", c );
return 0;
}

输出:

Complement - Value of c is -11

以下是另一个程序,其中包含了目前为止讨论过的所有运算符的示例:

#include <stdio.h>
main() {
unsigned int x = 48;	/* 48 = 0011 0000 */  
unsigned int y = 13;	/* 13 = 0000 1101 */
int z = 0;           

z =x & y;       /* 0 = 0000 0000 */ 
printf("Bitwise AND Operator - x & y = %d\n", z );

z = x | y;       /* 61 = 0011 1101 */
printf("Bitwise OR Operator - x | y = %d\n", z );

z= x^y;       /* 61 = 0011 1101 */
printf("Bitwise XOR Operator- x^y= %d\n", z);

z = ~x;          /*-49 = 11001111 */
printf("Bitwise One's Complement Operator - ~x = %d\n", z);

z = x << 2;     /* 192 = 1100 0000 */
printf("Bitwise Left Shift Operator x << 2= %d\n", z );

z= x >> 2;     /* 12 = 0000 1100 */
printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}

编译并运行该程序后,将产生以下结果:

Bitwise AND Operator - x & y = 0
Bitwise OR Operator - x | y = 61
Bitwise XOR Operator- x^y= 61
Bitwise One's Complement Operator - ~x = -49
Bitwise Left Shift Operator x << 2= 192
Bitwise Right Shift Operator x >> 2= 12

常见问题

按位与 (&) 对单个位进行操作并返回一个整数,而逻辑与 (&&) 测试整个表达式并返回一个真或假布尔值。

Shift 1. 创建掩码:设置值为 | (1 << n),清除值为 & ~(1 << n),切换值为 ^ (1 << n)。

左移 n 等于将无符号值乘以 2 的 n 次方;右移等于将其除以该无符号值,因此编译器为了提高速度而使用移位操作。

校验位 & 1。最低位对奇数返回 1,对偶数返回 0,比取模运算符更快。

嵌入式固件、驱动程序、加密、压缩、图形和网络都使用它们来打包标志、读取硬件寄存器、构建权限掩码和加快算术运算速度。

Shift 运算符的约束力比关系运算符更强,而 &、^ 和 | 位于等号下方,但位于逻辑 && 和 || 上方,因此为了安全起见,请使用括号。

是的。人工智能编码助手可以根据提示编写掩码和移位,解释否定补码,并将二进制示例转换为可运行的 C 代码。务必测试结果。

GitHub 副驾驶 建议使用位掩码宏、设置和清除位辅助函数以及移位运算;请根据您的位布局检查其完成情况。

总结一下这篇文章: