![]() |
[Java] Bit-Operationen mit signed ints und bytes
Ich steh gerade ein bisschen vor einem Problem. Java an sich kennt ja keine unsigned ints, bytes, ect., sondern alle Ganzzahltypen brauchen ein Vorzeichen.
Jetzt habe ich allerdings eine Bitmaske, gespeichert in einem byte, und muss die auf einen int anwenden. Als kleines Beispiel:
Code:
Natürlich kann er keinen int und byte so kombinieren, also wandelt er das byte vorher in einen int um, und genau da entsteht das Problem:
public int foo(int Value, byte Mask)
{ return Value & Mask; } //... foo(0x00FF00FF, (byte)-1) Die beabsichtigten Werte sind nämlich: 0x00FF00FF & 0xFF, soll also 0x000000FF ergeben, passiert allerdings nicht, da er nicht 255, sondern -1 in einen int konvertiert, und somit 0xFFFFFFFF als int-Maske ausspuckt, was dann zu nem anderen Ergebnis führt. Das einzige, das mir derzeit einfällt ist, dass ich der Maske vorher das Vorzeichen-Bit nehme, dann in einen int konvertiere, falls vorher vorhanden das Vorzeichenbit rein"odere", und dann die beiden Werte ver"unde". Aber irgendwie scheint mir diese Möglichkeit für mein Vorhaben etwas aufwändig, und relativ umständlich, gibt es hier nicht einen anderen, einfacheren Weg? greetz Mike |
Re: [Java] Bit-Operationen mit signed ints und bytes
Hi,
ich weiß nicht ob das Problem in dem Fall wirklich an Java liegt. Ich meine wenn Du einen Ganzzahltypen ohne Vorzeichen nimmst, der gerade 8 Bit breit ist, dann ist die Zuweisung von -1 einfach mal unsauber. Hier stellt sich finde ich eher die Frage, warum Du dort dann -1 und nicht 255 bzw. noch einfacher 0xFF zuweist. Sprachen die ein wenig auf Typsicherheit achten sollten bei der Zuweisung von -1 an einen vorzeichenlosen Typen auch ruhig mal die Complilierung verweigern! Die Frage ist deshalb viel mehr, ob es Sinn macht die -1 als 0xFF anzunehmen. Auch in anderen Sprachen wird das nicht unbedingt immer zu einer erfolgreichen Zuweisung führen, da -1 in 8 Bit Kodiert eher 10000001 als 0x81 entspricht (VZ-Bit gesetzt und 1). -128 wäre eher korrekt (da müsste man mal schauen, was das bei Java für eine Bitkodierung ergibt, müsste aber dann auch stimmen). |
Re: [Java] Bit-Operationen mit signed ints und bytes
Zitat:
greetz Mike PS: -1 ist auf einen byte gesehen immer 0xFF ;) |
Re: [Java] Bit-Operationen mit signed ints und bytes
Hallo Mike,
ein wenig klingt deine Frage danach: Ich sehe hier ein Dutzend Schrauben und einen Hammer, wie bekomme ich die Schrauben mit dem Hammer möglichst elegant in das Brett? In Java werden solche Operationen, wie du sie beschreibst, in der Regel mit einem BitSet ausgeführt. Willst oder musst du in Kenntnis dieser Klasse dennoch mit vorzeichenbehafteten Integer-Variablen arbeiten? Freundliche Grüße |
Re: [Java] Bit-Operationen mit signed ints und bytes
Zitat:
Ich hab die Konvertierung von byte auf int inzwischen auf i = b & 0xFF reduziert, d.h. der Aufwand hält sich nun in Grenzen. Für die Zukunft werd ich mir BitSet im Hinterkopf behalten, hätte mir einiges an Denkarbeit gespart. Danke für eure Hilfe :) greetz Mike |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz