C语言——位操作符

a&b,a|b,a^b,这种表达式的值都是放在内存中计算的,

所以我们对它们的补码进行计算。

a&b,a|b,a^b,它们的操作数必须都是整数


目录

按位与 &

按位或 |

按位异或^


按位与 &

&——按二进制位与

对应的二进制位有0则为0,两个同时为1则为1。

#include<stdio.h>
int main()
{int a=3;
//00000000000000000000000000000011——原码、反码、补码
int b=-5;
//10000000000000000000000000000101——原码
//11111111111111111111111111111010——反码
//11111111111111111111111111111011——补码
int c=a&b;
//00000000000000000000000000000011——a补码
//11111111111111111111111111111011——b补码
//00000000000000000000000000000011——c补码
printf("%d\n",c);
return 0;
}


按位或 |

|——按二进制位或

 对应的二进制位有1则为1,两个同时为0则为0。

#include<stdio.h>
int main()
{int a=3;
//00000000000000000000000000000011——原码、反码、补码
int b=-5;
//10000000000000000000000000000101——原码
//11111111111111111111111111111010——反码
//11111111111111111111111111111011——补码
int c=a|b;
//00000000000000000000000000000011——a补码
//11111111111111111111111111111011——b补码
//11111111111111111111111111111011——c补码
//10000000000000000000000000000101——c原码
printf("%d\n",c);
return 0;
}


按位异或^

对应的二进制位相同为0,相异为1。

#include<stdio.h>
int main()
{int a=3;
//00000000000000000000000000000011——原码、反码、补码
int b=-5;
//10000000000000000000000000000101——原码
//11111111111111111111111111111010——反码
//11111111111111111111111111111011——补码
int c=a^b;
//00000000000000000000000000000011——a补码
//11111111111111111111111111111011——b补码
//11111111111111111111111111111000——c补码
//10000000000000000000000000001000——c原码
printf("%d\n",c);
return 0;
}

 异或操作符有以下几个公式:

1.a^a=0        2.0^a=a   3.异或支持交换律

例题:

交换两个数的值

#include<stdio.h>
int main()
{int a=3;
int b=-5;
printf("%d %d\n",a,b);
a=a^b;
b=a^b;//a^b^b=a^0=a
a=a^b;//a^b^a=b^0=b
printf("%d %d\n",a,b);
return 0;

但是异或操作符只能针对整数的交换!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值