与えられた数x xの次の2のべき乗に丸めます。 私は単純な解決策を見つけましたが、 " - "操作なしでそれを解決することが可能かどうか、 >>、>>>、< <および|オペレーション。ここ は私のコードです:それはバージョン1に非常に近いですが最大2乗の2進演算に丸めます
バージョン1
public static int maxPowerOf2(int x)
{
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;
return x - (x >> 1);
}
バージョン2
public static int maxPowerOf2(int x)
{
int v=x;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v= v>>1;
int m16=~v;
v=v<<1;
v=v&m16;
return v;
}
"xの次の2乗は"という意味なので、3の場合は2か4になりますか? – Maljam
for 3は2で、17は16などです。 – kurumkan
どこでこれを見ましたか?ああ、['HashMap.tableSizeFor()'](http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/HashMap.java#l374 )。 – trashgod