前言
位操作符在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的二进制序列:00000000000000000000000000001101a |= (1 << (n - 1));//将第5位置为1后:00000000000000000000000000011101printf("%d\n", a);a &= ~(1 << (n - 1));//将第5位再置为0:00000000000000000000000000001101printf("%d\n", a);return 0;
}
运行结果: