Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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...

Geschrieben

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

Geschrieben

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.

Geschrieben

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".

Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...