Wenn ich einen Eingang habe, sagen wir 51 (00110011) und einen Index i, der einen Bit-Index darstellt (zB i = 0 -> 1, i = 2 -> 0), wie finde ich eine Potenz von 2 wie diese Beispiele . Tut mir leid, ich bin nicht großartig mit mathematischer Notation, aber ich kann Beispieleingabe und -ausgabe geben.Gibt es eine Nummer (Bitfolge) und einen Bit-Index, wie finde ich das nächsthöchste Bit?
Beispiel: Bei 51 und Index angegeben 1 (001100 1), möchte ich eine Funktion 00010000 = 16.
Auch zurückzukehren, wenn 2 173 und Index angegeben (10101 01), Die Funktion muss 00001000 = 8 zurückgeben.
Ich bin auf der Suche nach einer Lösung, die Bit-Operationen und keine Schleifen basierend auf der Größe der Zahl vorzugsweise verwendet.
EDIT: Dies ist keine Hausaufgaben. Ich schreibe ein Programm, das Benutzerauswahlen als Nummer speichert. Ich versuche mich hier herauszufordern. Hier
ist, was wenig ich habe in der Lage
x--;
for (int j = 0; j < 5; j++) {
x |= x >> (int) Math.pow(2, i);
}
x++;
return x;
Dies nimmt eine 32-Bit-Zahl zu tun und gibt die nächste Potenz von 2. Ich bin nicht sicher, ob dies von Nutzen ist aber mein Problem. Ich habe versucht, zu sehen, ob jemand anderes etwas Ähnliches geposted hat und das ist, was ich gefunden habe und dachte, dass es in dem, was ich versuche, spielen könnte.
EDIT 2 Ich habe Benutzer Tage der Woche auswählen und diese Tage in einer einzigen Nummer speichern. Bei einem gegebenen Tag möchte ich den nächsten Tag finden, den der Benutzer ausgewählt hat. Ich kann das leicht machen, indem ich die Zahl in ein boolesches Array umwandle, aber ich wollte sehen, ob es noch andere clevere Lösungen gibt. Ich entschuldige mich, wenn es zu "Hausaufgaben" ist.
Ich habe erkannt, wenn ich eine Zahl wie 51 (00110011) und Index 1 nehme, kann ich die ersten zwei Bits durch Division durch 2^1 = 001100 rasieren. Dann möchte ich, dass das Programm die Position von finden die erste 1 (Index 2). Dann sollte es 2^(2 + 2) zurückgeben, weil es 2 Bits abrastete und die nächste logische 1 danach bei Index 2 lag.
Wo ist dein Versuch? Dies ist kein Hausaufgabenlösungsdienst. – Kon
Das sind keine Hausaufgaben. Ich schreibe ein Programm, das Benutzerauswahlen als Nummer gespeichert hat. Ich versuche mich hier herauszufordern. – sadelbrid
Also bitte posten Sie Ihren Versuch, diese Herausforderung zu lösen, damit wir Ihnen helfen können zu verstehen, was falsch ist oder fehlt – Kon