介绍一下java里的highestOneBit()

来源:互联网 发布:益华软件 编辑:程序博客网 时间:2024/04/30 03:22

用于寻找int的最高位的1

返回该位的权值

与此类似的题目还有寻找最低位1,数1的个数,

这类题目在微软,谷哥等公司的面试有可能考到

highestOneBit(int i)

{

i|=(i>>>1);

i|=(i>>>2);

i|=(i>>>4);

i|=(i>>>8);

i|=(i>>>16);

return i^(i>>>1);

执行完i|=(i>>>1)后,最高位1的右边也成为1

执行i|=(i>>>2)后,最高位1右边的1+2=3位以内都成为1

执行i|=(i>>>4)后,最高位1右边的1+2+4=7位以内都成为1

......

执行i|=(i>>>16)后,最高位1右边的1+2+4+8+16=31位以内都成为1

i^(i>>>1)即可将最高位1右边的1都置为0