C语言移位操作之增删对应比特位

在实际开发中,常常用移位操作代替乘除法,因为一般情况下:

1.从效率上看,使用移位指令有更高的效率,因为移位指令占2个机器周期,而乘除法指令占4个机器周期。

2.从硬件上看,移位对硬件更容易实现,所以会用移位,移一位就乘2,这种乘法当然考虑移位了。

 

详细文章可以参考这个博客:https://blog.youkuaiyun.com/louxuez/article/details/24434207

下面想补充下,常使用移位操作增删对应的比特位,一个效率更高,第二个节省内存。下面举两个例子分别说明:

1.移位操作之增加对应比特位

这个比较好理解,也比较容易操作,直接位与就是了。

例子:将int类型的32位中的第1位和第三位变成1,即0x0000000a 十六进制a = 1010

#include <stdio.h>

#define ONE  1
#define TRE  3

int main(void)
{
	int temp;
	temp = (1 << ONE) | (1 << TRE);
	printf("temp=0x%x\n",temp);

	return 0;
}

结果:

 

2.移位操作之删除对应比特位

将int类型temp的32位中第三位变成0,即0x0000000a 变成0x00000002  即十六进制a = 1010 --> 0010

#include <stdio.h>

#define ONE  1
#define TWO  2
#define TRE  3
#define FOER 4
#define FIVE 5


int main(void)
{
	int temp = 0xa;

	temp = temp & ~(1 << TRE); //TRE位清0
	printf("temp=0x%x\n",temp);

	
	return 0;
}

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值