>>有符号右移和>>>无符号右移

>>和>>>都是右移

>>:溢出位舍弃,空出来的位用原来数的最高位补齐(有可能是用1来补位,也有可能是用0补位)

>>>:溢出位舍弃,空出来的位用0补齐(一定是用0补位)

总结:>>之所以叫有符号右移,是因为补高位的时候用的是符号位来补

>>>而无符号右移补高位的时候一定用的是0,跟符号位没有关系,所以叫无符号右移

另外:没有    "有符号左移"<<<

 做下面这道题目的时候,如果用有符号右移>>,那碰到这个测试用例的时候:11111111111111111111111111111101,由于会一直在高位补1,所以会陷入死循环,超出时间限制

所以我们需要高位补0,于是将>>换成>>>

 力扣剑指offer15   统计二进制中的个数

public class Solution 
{
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) 
    {

        int result=0;
        while(n!=0)
        {
            if((n&1)!=0)//判断最后一位是否为0,不为0,那就统计结果加1
            {
                result++;
            }
            n=n>>>1;
        }
        return result;
    }
}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值