位运算小结

来源:互联网 发布:激光手电软件下载 编辑:程序博客网 时间:2024/05/19 23:14

   当你做一个非常大的数的乘除运算时,你就会为位运算感叹,为之惊人的速度而感动!下面是我总结的一点点位运算的应用:

 

位运算符有:&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。

优先级从高到低,依次为~、&、^、|。

 

1.       左移1位相当于乘以2  << 左移2位相当于乘以4 依次类推左移N位相当于乘以2^n;(注意:两个操作数必须是int)

2.       右移1位相当于除2    >>右移2位相当于乘以4 依次类推左移N位相当于除2^n;

(注意:两个操作数必须是int,必须用于整除,结果也是整型的,不会保留小数部分).

3.       异或运算^:同为0,异为1

3.1应用 (只能用于整数)相同的两个整数作^运算结果为0。

3.2只能用于整数 0异或^其它任意整数等于该整数本身。(西南科大oj 1424 Find Different)。

3.3不用设置中间变量,用于交换两个整数的位置。

   Int a = 9 ; int b = 2;

   a = a ^ b;

   b = b ^ a;

   a = a ^ b;

4.    二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数.

判断int型变量a是奇数还是偶数,尤其是对大数的判断

        a&1 == 0 偶数

        a&1 == 1 奇数

5.  利用与运算可以求出一个int变量里面有多少个1

Sum里面存的就是该数对应的二进制中1的个数。

       
int a = 4095;int sum = 0;while(a > 0){     a = a & (a-1);     sum++;}cout << sum <<endl;

6.(|)按位或

| 运算符查看两个表达式的二进制表示法的值,并执行按位“或”操作。该操作的结果如下所示:

    0101   (expression1)    1100   (expression2)    ----    1101   (结果)

任何时候,只要任一表达式的一位为 1,则结果的该位为 1。否则,结果的该位为 0。


原创粉丝点击