• 位运算小结


    一、简介

      1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。
      2 "<<" 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。
      3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。
      4 ">>>"运算符,右边的位被挤掉,对于左边移出的空位一概补上0。

    二、常用方法(n为被操作数,k为操作数)

      1、按位与 &

        清零特定位----n=n&k (k的指定位为0,其他位为1)

        取某数中指定位 -- n=n&k(k的指定位为1,其他位为0)

      2、按位或  |

        将n的某一位置为1,n=n | k 。(k的指定位为0,其他位为1)

      3、位异或  ^

        指定位的值取反 n = n^k 。(k的指定位为1,其他位为0)

        实现两个数的交换,不使用第三个变量

            a = a ^ b ;   b = b ^ a ;   a = a ^ b

    三、应用举例

      1、计算一个数的二进制中1的个数(可以参见鄙人以前的博客

    /*
        计算一个数的二进制中1的个数
    */
    int countOf1(int num)
    {
        int count = 0;
    
        while(num)
        {
            num = num & (num - 1);
            count++;
        }
        return count;
    }

      2、判断一个数是否是2的n次方

     1 /*
     2     判断一个数是否为2的n次方(一个数为2的n次方,则最高位为1,其余位为0)
     3 */
     4 bool is2Power(int num)
     5 {
     6     bool flag = true;
     7 
     8     num = num & (num - 1); //计算num和num - 1的与的结果
     9     if(num) //如果结果为0,则不是2的n次方
    10     {
    11         flag = false;
    12     }
    13     
    14     return flag;
    15 }

      上面代码找个例子可以很容易的发现,也可以参见上面的链接。

    3、获得最大的int值

    int getMaxInt()  
    {  
        return (1 << 31) - 1;  
    } 

    4、获得最小的int值

    int getMaxInt()  
    {  
        return (1 << 31);  
    } 

    5、判断一个数的奇偶性

        /* 
            判断一个数的奇偶性.返回1,为奇数;返回0,为偶数 
        */  
        bool isOdd(int num)  
        {  
            return num & 1 == 1;  
        }  

    6、交换两个数(不借助第三变量)如上

    /*
        不适用临时变量,交换两个数
        a = a ^ b
        b = b ^ a
        a = a ^ b
    
    或者
           a = a + b
           b = a - b
           a = a - b    
        
    */
    void swap(int* a,int* b)
    {
        (*a) ^= (*b) ^= (*a) ^= (*b);
    }

      

  • 相关阅读:
    internet信息服务(iis)无法删除的解决方法
    JQuery和ASP.NET分别实现级联下拉框效果
    解决为应用程序池 提供服务的进程关闭时间超过了限制
    VS2015|Visual Studio Enterprise 2015简体中文版(企业版)
    ASP.NET MVC 4 (十) 模型验证
    基于.NET平台常用的框架整理
    业务逻辑层的设计(三)——事务的考虑
    业务逻辑层的设计(二)——让领域模型支持验证
    业务逻辑层的设计(一)——逻辑是谁的职责
    添加<!doctype html>后造成JS写的定位失效
  • 原文地址:https://www.cnblogs.com/plxx/p/4702955.html
Copyright © 2020-2023  润新知