>>和>>>都是右移
>>:溢出位舍弃,空出来的位用原来数的最高位补齐(有可能是用1来补位,也有可能是用0补位)
>>>:溢出位舍弃,空出来的位用0补齐(一定是用0补位)
总结:>>之所以叫有符号右移,是因为补高位的时候用的是符号位来补
>>>而无符号右移补高位的时候一定用的是0,跟符号位没有关系,所以叫无符号右移
另外:没有 "有符号左移"<<<
做下面这道题目的时候,如果用有符号右移>>,那碰到这个测试用例的时候:11111111111111111111111111111101,由于会一直在高位补1,所以会陷入死循环,超出时间限制
所以我们需要高位补0,于是将>>换成>>>
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;
}
}