小编Dav*_* B.的帖子

Java - 通过转换为double来查找长的前导零

在找到方法Long.numberOfLeadingZeros(long i)之前,我正在使用Math.getExponent(double d)将longs转换成双精度数.想法是找到long的双重表示,使用指数获得最高设置位,并从64减去它以获得前导零的数量.

这大部分都有效,但偶尔会被1关闭.以下for循环用于突出显示问题:

for (int i = 0; i < 64; i++) {
    double max = Long.MAX_VALUE >>> i;
    double min = Long.MIN_VALUE >>> i;
    double neg = -1L >>> i;
    System.out.format("Max: %-5d Min: %-5d -1: %-5d%n", Math.getExponent(dmax),
                                Math.getExponent(dmin), Math.getExponent(dneg));
}
Run Code Online (Sandbox Code Playgroud)

占产出的重要部分:

...
Max: 55    Min: 55    -1: 56   
Max: 54    Min: 54    -1: 55   
Max: 52    Min: 53    -1: 54   
Max: 51    Min: 52    -1: 52   
Max: 50    Min: 51    -1: 51 …
Run Code Online (Sandbox Code Playgroud)

java precision bit-manipulation

6
推荐指数
1
解决办法
126
查看次数

标签 统计

bit-manipulation ×1

java ×1

precision ×1