speedi Geschrieben 29. April 2009 Geschrieben 29. April 2009 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 Zitieren
kingofbrain Geschrieben 29. April 2009 Geschrieben 29. April 2009 Integer#toBinaryString(int) und dann den String zerlegen. Zitieren
speedi Geschrieben 29. April 2009 Autor Geschrieben 29. April 2009 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... Zitieren
kingofbrain Geschrieben 29. April 2009 Geschrieben 29. April 2009 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 Zitieren
Pointerman Geschrieben 29. April 2009 Geschrieben 29. April 2009 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. Zitieren
speedi Geschrieben 29. April 2009 Autor Geschrieben 29. April 2009 wie würde das dann in dem Konkreten fall aussehen, wenn ich z.B. wissen will ob bei 1384 das 128er-Bit gesetzt ist? Zitieren
Pointerman Geschrieben 29. April 2009 Geschrieben 29. April 2009 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". Zitieren
speedi Geschrieben 29. April 2009 Autor Geschrieben 29. April 2009 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. Zitieren
Empfohlene Beiträge
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.