c语言的位运算

c语言的位运算

c语言位运算有&、|、^、~、<<、>>等六种
除了~为单目运算,其余都是双目运算。
(1)& 按位与
比如二进制数1001和0110进行与操作,结果则为0000,即1&1为1。1&0、0&1、0&0都为0。
与操作通常用来讲某变量中的一些位清零,与此同时保持其他为不变,也可以用来获取某变量的其中的一位。
比如判断``一个数a的奇偶性,则可以用a&1;

if(a&1)
 	cout<<"a是奇数"<<endl; 
 	else
 	cout<<"a是偶数"<<endl;

(2)按位或 |
将参与运算的两个操作数对应的二进制位进行按位或操作,只有对应的两个二进制为都为零时,结果的对应二进制才是0,否则为1。
按位或通常用来讲某变量中的某些位置为1并且保留其他位不变。
例如 将int型变量a的低八位全置为1,其余位不变,则可以进行
a | 0xff其结果就是低八位全部为1
(int 型变量为四个字节,一共32位,0xff二进制位1111 1111)。

(3)按位异或^
将参与运算的两操作数各对应的二进制位进行异或操作,只有对应的两个二进制位不相同时,结果对应的二进制位为1,否则为0。即相同为0,不同为1。
异或运算的特点是
若a^b=c,则有c^b=a,c^a=b,
还可以写交换两个变量值的函数

void swap(int *a,int *b)
{
	*a=*a^*b;*b=*a^*b;*a=*a^*b;
}

以上函数实现了a和b的值的交换。
(4)按位非 ~
按位非运算符是单目运算符,讲操作数中的二进制0变为1,1变为0。
如9的二进制位是1001
~9则为0110;

(5)左移运算符 <<
c=a<<b的值是将a 的所有二进制位全部左移b位后得到一个新的结果赋值给c,左移时,高位丢弃,低位补0,a的值不因为运算改变。
实际上左移1位,相当于乘以2,左移n位,相当于乘以2^n,这个比乘法快很多。

(6)右移运算符>>
c=a>>b的值是将a 的所有二进制位全部右移b位后得到一个新的结果赋值给c,右移时,低位丢弃,若c是有符号数,右移时符号位(最高位)将一起移动,大多数c/c++编译器规定,如果原符号位为1,右移时高位就补充1,反之补0,a的值不因为运算改变。
右移一位也相当于除以2,右移n位相当于除以2^n,并将结果往小取整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值