Gegeben eine Zahl x Runde auf die höchste Potenz von 2, die nicht höher als x ist. Ich fand eine einfache Lösung, aber ich frage mich, ob es möglich ist, es ohne "-" Operation zu lösen, nur mit >>, >>>, < < und | Operationen. Hier ist mein Code:Runde auf die höchste Potenz von 2 nur binäre Operationen
Version 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);
}
Version 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;
}
Was meinen Sie mit "nächsthöchste Potenz von 2, die nicht höher als x ist", also für "3", wäre es 2 oder 4? – Maljam
für 3 ist 2, für 17 ist 16 etc. – kurumkan
Wo habe ich das schon mal gesehen? Oh ja, ['HashMap.tableSizeFor()'] (http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/HashMap.java#l374). – trashgod