写在快速幂模板之前的位运算介绍

先介绍一些位运算的技巧:

&:  0&0==0&1==1&0==0  1&1==1

|:   0|1  ==1|0  == 1|1 ==1  0|0==0

我们程序里的所有数在内存里都是以二进制的形式存储的,位运算就是直接对这些二进制数进行运算。

1. 位与运算 &

相同位数的两个数都为1,就为1,如果有其中一个不是1,则为0。

1101 & 1100 == 1100

用任意一个数&1就可以取到末位的数字。这样一来就可以判断奇偶性。

2&1  == 10&1 == 10&01==0

 

2.位或运算 |

只要一个位为1,,那么就为1。

1100 | 0001 == 1101

这个操作可以保存两个数中的1。

 

3.位异或^

0  xor 0 == 1 xor 1== 0,1 xor 0 == 0 xor 1==1

相同为0,不同为1。

1011^0101==1110

一个数连续异或两次相同的数就可以得到它本身。有了这个性质,就可以实现两个变量数据的交换。

 

#include<iostream>
using namespace std;
int main()
{
	int i,j;
	while(cin>>i>>j)
	{
		//swap(i,j);
		i=i^j;
		j=i^j;//j <- (i^j)^j==i
		i=i^j;//i <- (i^j)^i==j
		cout<<i<<" "<<j<<endl;
	}
	return 0;
}

 

4.取反运算~

 

5.左移<<

这个能将末尾数字向左移动,移动后后面的位置添加0

1111<<2 == 1100

这样可以直接进行*2的运算

 

6. 右移>>

 

posted @ 2019-08-12 12:33  龙龙666666  阅读(145)  评论(0编辑  收藏  举报