two*_*e18 7 java bit-manipulation
我需要在Java中的一些long,int和short中找到最高阶1.例如,如果我有一个看起来像的char 00110101,我需要一个返回2的方法(最高阶1的索引).
现在,我知道您可以使用for循环执行此操作,如:
for(int i=0; i<8; i++)
if((x & 1<<i) != 0) return i;
return -1;
Run Code Online (Sandbox Code Playgroud)
但这比我想做的慢.我知道现代CPU有指令在芯片上执行此操作,所以我想知道如何调用它而不是有一个显式循环.
编辑:如果你可以返回原语中所有的索引,就可以获得奖励积分.
谢谢.
mer*_*ike 14
Integer.numberOfLeadingZeros(i) + 1
该方法采用了一种很好的分而治之的方法,在此复制供您查看:
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7717 次 |
| 最近记录: |