C++中的移位运算

一、移位操作

1、位运算的规则是对二进制数字进行移位补零操作(高位舍弃,低位补零)

2、位运算符

<< 左移
>> 右移
>>>  
& 按位与
| 按位或
^  
~  

3、右移一位相当于除2,右移n位相当于除以2的n次方(右移正数补0,负数补1)

4、左移一位相当于乘2,左移n位相当于乘以2的n次方

5、除法的效率比移位运算效率低得多,善于利用移位运算可以大大提升算法效率


二、以剑指offer中第十五题为例,利用移位操作判断输入十进制数的二进制1的个数

//由于负数的最高位补1机制对负数运行会陷入死循环的算法 
int NumberOf1(int n)
{
	int count=0;
	while(n)
	{
		if(n&1) //按位与,判断位数是否为1
		count++;
		n=n>>1; //右移n 
	}
	return count;
}


//左移的解法,不会导致死循环
int NumberOf1(int n)
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值