位运算—与(&),或(|),取反(~),异或(^)详解
位运算—与(&),或(|),取反(~),异或(^)详解
按位与(&)
按位与运算符&,和逻辑与(&&)运算符类似,只有一个&,都是同为1则为1,有0就为0,按位相互运算。
实例:11&5
11 0000 0000 0000 0000 0000 0000 0000 1011
5 0000 0000 0000 0000 0000 0000 0000 0101
& ------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0001
可以看到,转换成2进制,长度需要相同,不足的话高位补0。
代码如下:
#include<stdio.h>
int main()
{
int a;
a=11&5;
printf("a=%d\n",a);
return 0;
}
运行结果:
a = 1
按位与运算符的作用:
1.清零
我们可以对某一个数与0进行按位与运算,由于两个位都为1才为1,最终全部位都变为0,起到清零的作用。
2.取指定位
如某些存储场景下,“第14位表示xxxx”,我们需要取出14位,则可以让原数值与数字15,即低4位全1(XXXX 1111),进行按位与运算,得到的结果即是原数值的1~4位的值。
3.判断奇数偶数
一个数的奇偶性可以通过二进制位的最低一位是0还是1判别,所以可以将这个数与1进行&运算,判断是0是1可知奇偶。
按位或(|)
**按位与运算符|,和逻辑与(||)运算符类似,只有一个|,都是有1则为1,全0才是0,按位相互运算。
实例:11&9
11 0000 0000 0000 0000 0000 0000 0000 1011
9 0000 0000 0000 0000 0000 0000 0000 1001
| ------------------------------------------
11 0000 0000 0000 0000 0000 0000 0000 1011
代码:
#include<stdio.h>
int main()
{
int a;
a=11|9;
printf("a=%d\n",a);
return 0;
}
运行结果:
a = 11
按位或运算符的作用:
对一个数字的指定位置为1,如“某个数字的第七位”表示开关,原先是0,需要改为1的状态,即可以将这个数字与64按位或,即可得到第七位变为1,其余位的值依旧不变。
按位异或(^)
^表示按位异或运算符,顾名思义,相异,相同为0,不同为1。
实例:11&9
11 0000 0000 0000 0000 0000 0000 0000 1011
9 0000 0000 0000 0000 0000 0000 0000 1001
^ ------------------------------------------
2 0000 0000 0000 0000 0000 0000 0000 0010
代码:
#include<stdio.h>
int main()
{
int a;
a=11^9;
printf("a=%d\n",a);
return 0;
}
运行结果:
a = 2
按位异或运算符的作用:
1. 指定位数的翻转:
如想对某个数字的低4位进行翻转,则可以将这个数字与15(二进制为00001111)进行按位异或运算,既可以将原数字的低四位进行翻转,即高四位不变,低四位0变1,1变0。
2. 与0异或还是原值:
大家可以自行实验,一个数字与0进行异或,结果还是原值。
3. 交换两个数字:
除了之前我们学习交换两个数字需要第三个变量做中介之外,如今可以通过异或运算进行,代码如下:
#include<stdio.h>
int swap(int *a,int *b)
{
if (*a!=*b)
{
*a=*a^*b;
*b=*b^*a;
*a=*a^*b;
}
return 0;
}
int main()
{
int a=11;
int b=9;
swap(&a,&b);
printf("a=%d b=%d\n",a,b);
return 0;
}
运行结果
a = 9 b = 11
按位取反(~)
~取反运算符,是对数值的二进制位进行取反,是第一个单目运算符,因为只有一个运算对象,运算过程是即0变为1,1变为0,非常好理解。
实例:11&9
~1 = 0
~0 = 1
代码:
#include<stdio.h>
int main()
{
unsigned int a=1;
printf("~a=%u\n",~a);
return 0;
}
运行结果:
~a = 4294967294
按位取反运算符的作用:
作用就是取反(doge)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本