面试中常见的位运算题目

本文介绍了位运算的基本操作,并通过实例详细讲解了如何利用位运算解决常见面试题,包括求二进制中1的个数、判断是否为2的幂、两数交换、找出唯一出现的数、位运算实现加减法、计算位变化次数、计算数字范围内的1个数、解决N皇后问题以及位运算在bitmap和布隆过滤器中的应用。
摘要由CSDN通过智能技术生成

0. 常见位运算及操作简介

  • & : 与运算,两个数全为1结果为1,否则结果为0
  • | : 或运算,两个数全为0结果为0,否则结果为1
  • ~:非运算,1变为0,0变为1
  • ^:异或运算,相同为0,相异为1
  • " >>" 和 “>>>” , 算术右移和逻辑右移,相当于除以2

A = 11111111111111111111111110000001
B = 2
A >> B = 11111111111111111111111111100000
A >>> B = 00111111111111111111111111100000

  • “<<” 相当于乘以2
  • 技巧一:n & (n-1) 去掉最后一位的1
  • 技巧二: a ^ b ^b = a
  • 技巧三: n & (-n) 得到最后一位的1

1. 求二进制中1的个数

题目:给出一个整数n,求其二进制表示中1的个数。
思路:1.每次根据技巧一去掉一位1,进行统计;2.定义一个mask与原数的每一位进行与运算

// 求一个数中1的个数
    public static int numberOfOne1(int n){
   
        // 此方法会改变输入数据的值
        int cnt = 0;
        while(n != 0){
   
            cnt++;
            //去掉最后一个1
            n &= n-1;
        }
        return cnt;
    }

    //求一个数中1的个数
    public static int numberOfOne2(int n){
   
        // 此方法不会改变输入数据值
        int cnt = 0;
        int mask = 1;
        while(mask != 0){
   
            if((n & mask) != 0){
   
                cnt ++;
            }
            mask <<= 1;
        }
        return cnt;
    }

2. 判断一个数是否为2的幂或4的幂

题目:判断一个数是否为2的幂或者为4的幂
思路:1.如果为2的幂则二进制表示中1仅可出现一次;2.如果为4的幂,首先是2的幂,然后需要保证二进制中1的位置在偶数位上;

//判断一个数是否是2的幂
    public static boolean isPowOfTwo(int n){
   
        return (n != 0 && (n & (n - 1)) == 0);
    }

    //判断一个数是否是4的幂
    public static boolean isPowOfFour(int n){
   
        //先判断是否是2的幂
        //然后判断1所在的位置是否在偶数位上
        return ((n & (n - 1)) == 0) && n >0 && ((n & 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值