C语言中的算术移位和逻辑移位

318 阅读3分钟

位操作技术,如逻辑移位和算术移位是用来改变位的。一个单一位置的左逻辑移位将每个位向左移动1,其最重要的位被移除,最不相关的位被替换为0。其最重要的位被移除,而最不相关的位被替换为0。一个位置的右逻辑移位将每个位通过1向右移动。最不重要的位被移除,而操作数被0所恢复。

单一位置的左算术移位将每一位都向左转移一个位。它与左逻辑移位相同。单一位置的右算术移位将每个位向右移1位。当整数的乘法或除法时,可以使用算术移位功能。一个数字乘以2n,其中n代表交换的比特位置数,是左移法的结果。一个数字除以2n是右移法的结果,其中n代表交换的比特位置数。

本文将演示一些使用C语言中位移函数的技术。

通过使用<<操作符将整数向左移动

每种语言都有位数移位技术,这些技术可以重新定位由所需位置数指定的数字的每个位。为了正确评估这些方法的影响,我们会在前面的情况下引入二进制函数,显示所提供数字的二进制形式。

这个方法只建立在对32位数字的操作上。下面的代码说明了四次左移,并呈现出相应的数字值。

#include <stdio.h>
#include <stdlib.h>
void binary(unsigned num)
{
unsigned j;
for (j=1 < 0; j/= 4)
(num &j)?printf( "1" ) 。printf( "0");
}
int main(int argc, char*argv []) {
int num1 =456;
binary(num1); printf( " :%d\n" , num1);
num1<<=4;
binary(num1); printf(" : %d\n" , num1);
exit(EXIT_SUCCESS);
}。

首先,我们引入了两个库和.在下一步,我们定义了binary()函数。同时,我们向二进制()函数声明一个参数 "unsigned num"。我们利用一个for循环。在这里,我们在for循环中初始化一个变量。循环反复进行,直到数值达到31。现在,我们在二进制()函数的主体之外使用main()函数。一个具有整数数据类型的变量被初始化。同样地,我们创建了一个具有字符数据类型的构造函数。

我们声明一个变量 "num1 "并指定其值。接下来,这个值被作为参数提供给二进制()函数。Printf()函数被用来显示定义的数字的二进制值。<<运算符被应用于变量 "num1 "的值。因此,它被用来将数字调整到左边。现在,利用binary()和print()方法来打印数字移位后的结果。

利用左移法将一个数字乘以4。

我们将利用左移<<更有效的操作来完成4的乘法。需要注意的是,在向左移动时,逻辑移位和算术移位没有区别。

特定位置的移位会导致乘法;因此,我们可以在任何地方移位以获得适当的乘法。

#include <stdio.h>
#include <stdlib.h>
void binary(unsigned num)
{
unsigned k;
for (k=1 << 31; k> 0; k/= 4)
(num &k)?printf( "1" ) 。printf( "0");
}
int main(int argc, char*argv [] ) {
int num1 =678;
printf( "%d\n" , num1);
num1<<=1;
printf( "%d x 4\n" , num1);
exit(EXIT_SUCCESS);
}

在程序的开头,两个头文件<stdio.h>和<stdlib.h>被包含在binary()方法的声明之前。在binary()函数的内部使用了循环,变量'k'在这里被初始化。printf()函数也被用来以1和0的形式打印数值。此外,我们定义了main()函数。这个函数持有两个参数,包括一个变量和一个构造函数。这个变量和构造函数的数据类型是不一样的。

此外,我们创建了另一个变量并设置了这个变量的值。我们应用print()函数来展示给定数字的实际二进制值。在下一步,我们利用<<操作符,将数字移到定义值的左边。再一次,printf()方法在移动数字并将数值乘以4后得到输出。 这样,我们必须结束代码。

将整数向右移动,使用>>操作符

值得一提的是,有符号数和无符号数的表达方式是不同的。尤其是有符号的,被解释为两个补数的整数。因此,最普遍的负值类型是1,被称为有符号的位,而正数则以0开始。因此,如果我们通过分析将负数位向右转移,就会去掉符号,得到正数。2
因此,我们应该区分逻辑转移和算术转移,前者保留其最重要的位。在这里,我们进行了算术移位,并保留了数字的负值,正如下面的例子结果所示。

#include <stdio.h>
#include <stdlib.h>
void binary(unsigned num)
{
unsigned l;
for (l=1 >=5;
binary(num2); printf( " :%d\n" , num2);
exit(EXIT_SUCCESS);
}

这里,我们必须整合所需的库<stdio.h>和<stdlib.h>。binary()函数在下一步被调用。此外,我们在binary()方法中引入了一个 "无符号num "参数。 我们使用了for循环,在for循环中,我们必须定义一个变量。我们在二进制()函数的主体之外使用了main()函数。我们做了一个字符数据类型的构造函数,并声明了一个整数数据类型的变量。

此外,一个名为 "num1 "的变量被初始化并分配了值。然后,这个值被作为参数传递给二进制()方法。printf()函数显示一个给定数字的二进制值。操作符>>通过应用于变量 "num1 "的值,将数字向右移动。自从移动数字后,二进制()和printf()函数就被应用来打印结果。然后用exit()方法来结束程序。

总结

我们已经讨论了C语言中算术和逻辑移动的具体细节。我们已经观察到如何在>>操作符的帮助下将整数向右移动,并通过<<操作符向左移动。在这里,我们也使用了左移的方法来乘以一个数字。