Zum Inhalt springen

Binärstellen in Abfragen


speedi

Empfohlene Beiträge

Hi,

gibt es in java eine performante Möglichkeit binärstellen (z.B. von ints) abzufragen oder zumindest eine schnelle Möglichkeit einen int in ein boolean[] zu konvertieren?

Ich möchte gern abfragen, ob ein bestimmtes bit im int (z.B. die 128er Stelle) auf true oder false steht. Eine Variante wäre sicher den int in einen binär-String umzuwandeln und dann mit charAt( ) abzufragen ob es 0 oder 1 ist, aber aus logischer Sicht dürfte das wohl kaum recht schnell und sinnvoll sein.

gruß Dan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Integer#toBinaryString(int) und dann den String zerlegen.

Ja diese Variante ist mir eben auch schon eingefallen, aber ich wollte hier eigentlich wissen, ob es noch etwas anderes gibt was performanter ist. Denn erst einen String zu erstellen und dann darin abzufragen ist sicher nicht besonders gut.

Ich such mehr nach sowas wie:

if(i{3} == true){

falls es sowas gibt...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mir ist nichts bekannt. Wie lange dauert denn der Aufruf? In meinen Augen sollte man erst versuchen, zu optimieren, wenn man weiß, dass es sich um einen Flaschenhals handelt. Wenn dich nur das höchste oder niedrigste Bit interessiert, kannst u natürlich auch über die entsprechenden Methoden in Integer gehen.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin!

Wie sieht es denn mit dem Einsatz des &-Operators aus?

Da führst Du dann einfach ein logisches UND mit einer Maske aus, an der das "interessante" Bit gesetzt ist und vergleichst dann mit 0. Sollte der Vergleich "true" ergeben, ist das Bit nicht gesetzt.

Etwas besseres fällt mir auf die Schnelle nicht ein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe hier auf der Arbeit kein Java und bin auch nicht so sehr sattelfest, aber ich versuchs mal:


int zahl = 1384;
int bitMaske = 128; //deutlicher wuerde es in Bitschreibweise
boolean bitGesetzt = ((zahl & bitMaske) != 0);

if(bitGesetzt)
...tu was immer bei gesetztem Bit zu tun ist
else
...

[/PHP]

Wenn Du alle Bits Abfragen willst, kannst Du Dir eine Schleife bauen, vor deren Beginn das erste Bit der Maske auf 1 gesetzt und Du dann in der Schleife durch Verschieben das Bit eine Stelle "weiterrückst".

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke!

Bin mittlerweile mit einem Kollegen zusammen auf noch eine weitere Variante gekommen, die auch recht gut funktioniert - aber deine dürfte wohl noch einen tick schneller sein:

( value >> (numberofbit-1) & 1 ) 

Danke!!

Das gefällt mir unendlich besser, als erst einen String zu bilden und dann die chars abzufragen. Wenn ich mir überlege was da im Speicher und im Prozessor alles passiert wird mir leicht übel.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...