【力扣191二进制位中1的个数,190颠倒二进制位,371两数相加】

本文探讨了三种不同的计算机科学概念:191思路的二进制位操作(左移和右移),190思路的位反转,以及371思路的两数相加(异或、位与与进位处理)。通过实例代码展示了如何使用这些技巧实现相应的功能,如计算二进制哈明重量和位操作结果。
摘要由CSDN通过智能技术生成

191思路

1、左移:表示二进制位向左移动,后面补0。数学意义上是乘2.
右移:表示二进制位向右移动,数学意义上是除2取整。
2、循环对每一位都进行判断,是否为1。判断方式就是,比如判断第i位是否为1,就与2的i次方(也就是i位为1,其他位都为0)做与操作。如果第i位为1,则与结果为1;如果第i位为0,则与结果为0。

代码

public int hammingWeight(int n) {
        int res=0;
        for(int i=0;i<32;i++){
            if((n & (1<<i))!=0){
                res++;
            }
        }
        return res;
    }

190思路

得到n的二进制位的每一位上的数字。比如得到第i位上的数字,左移到(31-i)位上。

代码

public int reverseBits(int n) {
        int res=0;
        for(int i=0;i<32;i++){
        //   res=res+ ((n&(1<<i))<<(31-i));
        res=res+((1&(n>>i))<<(31-i)); 
        }
        return res;
    }

371思路-两数相加

1、异或为两数不考虑进位的情况下的结果
2、位与,为需要进位的位置
3、不考虑进位的结果+进位左移一位=结果

代码

public int getSum(int a, int b) {
        while(b!=0){
            int carry=(a&b)<<1;//将进位的位置往左移动一位,表示进位
             a=a^b;//相同为0.不同为1,表示不考虑进位的结果
             b=carry;
        }
        return a;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值