位运算的妙用
不用加减乘除做加法
//step1:异或查看两个数进行加法操作后的结果 //step2:与运算计算出想对应的位置的进位结果,然后左移一位 //b代表的是两数相加是否有进位,有的话就继续,没有的话就结束得出相加后的答案 public class Solution{ public int Add(int a,int b){ while(b != 0){ int temp = a ^ b;//计算出相对应的位置相加后的结果 b = (a & b) << 1;//计算出想对应的位置的进位,然后左移一位 a = temp; } return a; } } //这个其实可以简写成return (a^b)+((a&b)<<1);
不使用第三个变量的情况下交换两个变量的值
//原理:运用异或的特性 //A ^ B = C --> C ^ A = B --> C ^ B = A public void exchange(int a,int y){ x = x ^ y; y = x ^ y; x = x ^ y; }
二进制中1的个数
public class Solution{ public int NumberOf1(int a){ if(a == 0||a == 1){ return a; } int count = 0; while(a != 0){ count++; a = a & (a-1); } return count; } }
判断一个数的奇偶性
public void Test(int a){ if((a & 1)==0){ System.out.println("a是偶数"); }else{ System.out.println("a是奇数"); } }
计算平均数
public int average(int a,int b){ return (a & b)+((a ^ b) >> 1); }
计算中位数
public void Test(int a,int b){ //通过位运算不会造成溢出 int mid = a + (a - b) >> 1; }
本文来自博客园,作者:紫英626,转载请注明原文链接:https://www.cnblogs.com/recorderM/p/15957111.html