zoukankan      html  css  js  c++  java
  • 写在快速幂模板之前的位运算介绍

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

    &:  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. 右移>>

  • 相关阅读:
    归并排序
    希尔排序和插入排序的关系
    相对路径与绝对路径
    httpservlet类中两个service方法
    假如生活欺骗了你
    循环队列判满和判空的两种方式
    并查集,带权,水题PKOJ1703
    字典树HDU1251
    POJ食物链,并查集,包含种类的分部
    HDU1043逆向bfs打表
  • 原文地址:https://www.cnblogs.com/dragondragon/p/11339008.html
Copyright © 2011-2022 走看看