Veröffentlicht 29. April 200916 j 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
29. April 200916 j Autor 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...
29. April 200916 j 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
29. April 200916 j 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.
29. April 200916 j Autor wie würde das dann in dem Konkreten fall aussehen, wenn ich z.B. wissen will ob bei 1384 das 128er-Bit gesetzt ist?
29. April 200916 j 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".
29. April 200916 j Autor 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.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.