位操作个人总结

位操作实现加减法

工具

  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;
    }

全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:28
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务