【发布时间】:2017-10-12 09:25:02
【问题描述】:
源代码是:
public static int numberOfLeadingZeros(int i) {
// HD, Figure 5-6
if (i == 0)
return 32;
int n = 1;
if (i >>> 16 == 0) { n += 16; i <<= 16; }
if (i >>> 24 == 0) { n += 8; i <<= 8; }
if (i >>> 28 == 0) { n += 4; i <<= 4; }
if (i >>> 30 == 0) { n += 2; i <<= 2; }
n -= i >>> 31;
return n;
}
我认为可以优化,应该添加以下条件:
if (i < 0)
return 0;
完全优化的代码是:
public static int numberOfLeadingZeros(int i) {
if(i<=0) {
return i < 0 ? 0 : 32;
}
int n = 1;
if (i >>> 16 == 0) { n += 16; i <<= 16; }
if (i >>> 24 == 0) { n += 8; i <<= 8; }
if (i >>> 28 == 0) { n += 4; i <<= 4; }
if (i >>> 30 == 0) { n += 2; i <<= 2; }
n -= i >>> 31;
return n;
}
【问题讨论】:
-
你的问题是?
-
我的问题是:优化后的代码是否正确?或者,我的想法对吗?
-
因为我不知道你想要达到什么目的......不知道
-
如果它只是一个“优化”,写一些单元测试来证明你的实现的正确性!
-
我觉得优化后的代码效率更高,是吗?
标签: java jvm openjdk jvm-hotspot