Integer类中的numberOfLeadingZeros

转自

https://www.jianshu.com/p/2c1be41f6e59

 

该方法的作用是返回无符号整型i的最高非零位前面的0的个数,包括符号位在内;

 

二分法

 

public static int numberOfLeadingZeros(int i) {
        if (i <= 0) {
            return i == 0 ? 32 : 0;
        } else {
            int n = 31;
            if (i >= 65536) {
                n -= 16;
                i >>>= 16;
            }

            if (i >= 256) {
                n -= 8;
                i >>>= 8;
            }

            if (i >= 16) {
                n -= 4;
                i >>>= 4;
            }

            if (i >= 4) {
                n -= 2;
                i >>>= 2;
            }

            return n - (i >>> 1);
        }
    }

 

posted @ 2020-09-11 16:35  Numerz  阅读(445)  评论(0编辑  收藏  举报