位操作个人总结

位操作实现加减法

工具

  1. &操作 、 << 左移位 用于求进位
  2. ^操作 用于不进位加法

原理

1. 不进位加法运算 。
2. 计算进位 。

3. 把进位加上重复12操作,直到进位为0

举例

6+12
二进制为0110+1100

  • (0110^1100)=1010
  • (0110&1100)<<1=1000
    进位不为0 ,重复1、2
  • (1010^1000)=0010
  • (1010&1000)<<1=10000
    进位不为0 ,重复1、2
  • (0010^10000)=10010
  • (0010&10000)<<1=0
    进位为0
    结果就是10010=18

代码演示

//计算a与b之和(也就是加减法运算)
 public int getSum(int a, int b) {
   

        while (b!=0){
   
            int tmp=a^b;
            b=(a&b)<<1;
            a=tmp;
        }

        return a;
    }

位操作的小技巧

数学准备

a&a=0;
0&a=a;
a&b&a=(a&a)&b=0&b=b;

题目背景

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。题目来源
我们可以对所有数据进行&操作,就可以得到单身狗数字了。

代码

 public int singleNumber(int[] nums) {
   
      /* Integer[] arr = new Integer[nums.length]; for (int i = 0; i < nums.length; i++) { arr[i] = nums[i]; } Arrays.sort(arr); for (int i = 0; i < arr.length - 1; i = i + 2) { if (!arr[i].equals(arr[i+1])) return arr[i].intValue(); } return arr[arr.length - 1].intValue();*/
     int demo=0;
     for(int i:nums){
   
        demo=demo^i;
      }
      return demo;
    }

全部评论

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务