AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [Java] Bit-Operationen mit signed ints und bytes
Thema durchsuchen
Ansicht
Themen-Optionen

[Java] Bit-Operationen mit signed ints und bytes

Ein Thema von JasonDX · begonnen am 17. Jan 2008 · letzter Beitrag vom 21. Jan 2008
Antwort Antwort
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#1

[Java] Bit-Operationen mit signed ints und bytes

  Alt 17. Jan 2008, 13:56
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:
public int foo(int Value, byte Mask)
{
  return Value & Mask;
}
//...
foo(0x00FF00FF, (byte)-1)
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:
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: [Java] Bit-Operationen mit signed ints und bytes

  Alt 18. Jan 2008, 16:44
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).
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

Re: [Java] Bit-Operationen mit signed ints und bytes

  Alt 19. Jan 2008, 15:08
Zitat von Der_Unwissende:
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!
Stimm ich vollkommen zu, bloß ein Problem gibts hierbei noch: Java kennt keine vorzeichenlosen Typen

greetz
Mike

PS: -1 ist auf einen byte gesehen immer 0xFF
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: [Java] Bit-Operationen mit signed ints und bytes

  Alt 19. Jan 2008, 15:27
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
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#5

Re: [Java] Bit-Operationen mit signed ints und bytes

  Alt 21. Jan 2008, 09:46
Zitat von marabu:
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?
Die Klasse kannte ich noch gar nicht Aber an Zahlen direkt bin ich nicht gebunden, ich muss nur welche ins Bitset an bestimmten Stellen reinschreiben und rauslesen.
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz