前言
位操作符在C语言初学阶段相对其他操作符来说,是一种难度比较大的操作符,且运用较少的一类操作符,但是位操作符并不是“一无是处”,合理运用的位操作符,在某些场景下可以优化算法,提高代码的执行效率,存在即合理。
下面给出位操作符的实际运用实例:
^操作符
1.不能创建临时变量(第三个变量),实现两个整数的交换。
^的操作符的特点:
①0^x=x ②x^x=0
//不允许创建临时变量,交换两个整数的内容
#include<stdio.h>
int main() {
int a = 2;
int b = 3;
printf("打印前%d %d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("打印后%d %d", a, b);
return 0;
}
运行结果:
&、>>操作符
2.求一个整数存储在内存中的二进制1的个数。
&操作符特点,n&1,就能得到最后一个二进制位是否为1.
//2.求一个整数存储在内存中的二进制1的个数。
#include<stdio.h>
int main() {
int n, i, count=0;
scanf("%d", &n);
for (i = 0; i < 32; i++) {
if ((n >> i) & 1 == 1)
count++;
}
printf("%d",count);
return 0;
}
多组输入运行结果:
|、~、<<操作符
3.一个数的第n位二进制位置0,或置1。
基本思想:置1,a|=a<<(n-1),
置0,a&=~(a<<(n-1))
#include<stdio.h>
int main() {
int a, n, j;
scanf("%d %d", &a, &n);//假定输入13 5
//13的二进制序列:00000000000000000000000000001101
a |= (1 << (n - 1));
//将第5位置为1后:00000000000000000000000000011101
printf("%d\n", a);
a &= ~(1 << (n - 1));
//将第5位再置为0:00000000000000000000000000001101
printf("%d\n", a);
return 0;
}
运行结果: