您现在的位置是:首页 > 正文

位运算的一些技巧

2024-04-01 01:39:00阅读 3

1. 两个数异或,相当于每一位相加,而不考虑进位;
2. 两个数相与,并左移一位,相当于求得这两个数相加的进位;

3. 一个数n与其减一的数相与(即n&(n-1)),等价于去掉最左边的1
如n=10二进制为1010,n&(n-1)=1000

应用以上技巧可以解决一些算法题:
下面是剑指offer上的一道题:
在这里插入图片描述

class Solution {
public:
    int Add(int num1, int num2)
    {
      int sum=num1,sub=0;
       while(num2!=0)
       {
         sum=num1^num2;
         sub=(num1&num2)<<1;
         num1=sum;
         num2=sub;
       }
      return sum;
    }
};

完美应用上面第一条和第二条技巧。

再比如:
在这里插入图片描述

class Solution {
public:
     int  NumberOf1(int n) {
         int count=0;
         while(n)
         {
             ++count;
             n=n&(n-1);
         }
         return count;
     }
};

非常的简单实用!!!

网站文章