0
点赞
收藏
分享

微信扫一扫

位运算

Fifi的天马行空 2022-01-30 阅读 56
算法

x>>k

x>>1等价于x/2 

       设x=10,k=1;x的二进制形式为(1010),x>>k为x右移一位即(101),若k为2则x>>k为x右移两位即(10)。

代码:

# include <iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	while(n)
	{
		cout << (n >> 1) << endl;
		n = (n >> 1);
	}
	return 0;
}

实现效果:

第一次x>>k得二进制(101)即十进制5;

第二次x>>k得二进制(10)即十进制2;

第三次x>>k得二进制(1)即十进制1;

最后得0,循环结束。

 

 x<<k

x<<1等价于x*2

       设x=10,k=1;x的二进制形式为(1010),x<<k为x左移一位即(10100),若k为2则x>>k为x右移两位即(101000)。

代码:

# include <iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	while(n<50)
	{
		cout << (n <<1) << endl;
		n = (n << 1);
	}
	return 0;
}

实现效果: 

 

第一次x<<k得二进制(10100)即十进制20;

第二次x<<k得二进制(101000)即十进制40;

第三次x<<k得二进制(1010000)即十进制80;

最后得n>50,循环结束。

x&1

      x&1表示二进制x最低位的数值。

例如:

10的二进制为(1010)则10&1得 0

15的二进制为(1111)则15&1得 1

8的二进制为(1000)则8&1得 0

代码:

# include <iostream>
using namespace std;
int main()
{
	int n;
	cout << (10 & 1)<<endl;
	cout << (15 & 1)<<endl;
	cout << (8 & 1)<<endl;
	return 0;
}

 实现效果:

 综合应用:

# include <iostream>
using namespace std;
int main()
{
	int n = 10;
	for(int i=3;i>=0;i--)
	{
		cout << (n >> i & 1);
	}
	return 0;
}

实现效果:

 

lowbit()函数 

        lowbit(n)是n的二进制表达式中最低位的1所对应的值。

 实现原理:

        在二进制时,一个整数的负数,为这个整数取反加1。

        以101010000为例,取反为010101111,加一后为010110000,取反加一后与原数相与得000010000,得到的即为最低位的1所对应的值。

代码:

# include <iostream>
using namespace std;
int lowbit(int x)
{
	return x&(-x);//等于return x&(~x+1)
}
int main()
{
	int n;
	cin >> n;
	cout<<lowbit(n);
	return 0;
}

效果展示:

 

 

举报

相关推荐

位运算(&、|、^、~、>>、<<)

【位运算】

逻辑运算 位运算

位运算操作

java 位运算

认识 位运算

0 条评论