Portal > Foren > Java > Allgemeine Java-Programmierung > vorzeichenlose Bytes
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 01.07.2005, 18:05 Nach oben    #1
Benutzer
 
Registriert seit: 19.03.2005
Beiträge: 35
Standard vorzeichenlose Bytes

Hi@all,

im Buch "Java ist eine Insel" hänge ich gerade an einem Absatz (2.8.8 Vorzeichenlose Bytes in ein Integer und Char konvertieren).

[Auszug:]
Liegt ein Byte als Datentyp vor, so kann es zwar automatisch zu einem int angepasst werden, aber die automatische Typkonvertierung erfüllt nicht immer den gewünschten Zweck.

Code:
byte b1 =       100;
byte b2 = (byte)200;

System.out.println( b1 );                  // 100
System.out.println( b2 );                  // -56
Soweit noch alles klar

Beim zweiten Byte ist eine Typanpassung nötig, da 0x90 größer als 0x7f ist und daher den Zahlenbereich eines Byte -128 bis 127 überschreitet. Dennoch kann ein Byte das gegebene Bitmuster annehmen und repräsentiert dann die negative Zahl -56. Wird diese ausgegeben, findet bei println(int) eine automatische Typanpassung auf ein int statt und die negative Zahl als byte wird zur negativen int-Zahl. Das bedeutet, dass das Vorzeichen übernommen wird. In einigen Fällen ist es jedoch wünschenswert, ein byte vorzeichenlos zu behandeln. Bei der Ausgabe soll dann ein Datenwert zwischen 0 und 255 herauskommen.

Was er möchte ist auch noch klar

Um das zu erreichen, schneiden wir mit der Und-Verknüpfung - alle anderen Bits ausgenommen - die unteren acht heraus. Das reicht schon. Die Lösung zeigt die Funktion byteToInt(

Code:
static int byteToInt( byte b )
{
  return b & 0xff;
}
Hier beginnen meine Verständnis-Probleme. Ein Byte belegt, wie der Name schon ein Byte Speicherplatz. Nun will er mit einer Und-Verknüpfung alle Bit's mit ausnahme der unteren acht heraus schneiden. Da ein Byte acht Bit hat würde er doch nichts heraus schneiden, oder?

Die Schreibweise (int)b ist nicht nötig, da die automatische Typanpassung das Byte b in einer arithmetischen Operation automatisch auf ein int konvertiert.

Der letzte Absatz ist wieder klar. Kann mir das jemand von Euch erklären was der Autor mir damit sagen will?

Viele Grüße
pixel
pixel ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.07.2005, 13:08 Nach oben    #2
mr.no
Gast
 
Beiträge: n/a
Standard

So viel ich weis gibt es vor den 8 Bit noch ein bit für das Vorzeichen ist dies 1 wird die zahl negativ. Dieses bit wird über die und Verknüpfung entfernt und auf 0 gesetzt. 0=positiv.
So ist es auf jedenfall bei manchen anderen programmiersprachen.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.07.2005, 16:18 Nach oben    #3
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

9 bit bytes? Nö, daran glaube ich jetzt gar nicht

Ich nehme mal an das Byte wird für die Bitweise Operation nach Int konvertiert (4 Bytes) - sonst macht die Sache keinen Sinn und würde auch nicht funktionieren. Wenn das jetzt ein Int wird dann wird das Vorzeichenbit ganz am Anfang des Ints gesetzt bei der Konvertierung (wenn das erste Bit des Ints gesetzt war) - das würdest du dann wegschneiden mit obiger Operation.

Aber dann frage ich mich wieso er bei der Konvertierung Byte->Int nicht das erste Bit des Bytes (er geht ja von Signed-Datentypen aus) auf 0 setzt - schliesslich ist das ja nun nicht mehr das Vorzeichenbit...
Auf 0 setzen tut er das aber offensichtlich nicht sonst würde obige Funktion ja nicht funktionieren.

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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 sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Diverses aus meinem Apache Logs robo47 Tools, Server, Betriebssysteme 3 25.05.2007 22:52
Ladezeiten ? CIX88 Plauderecke 39 07.11.2006 23:02
[PHP] Bytes in andere Einheiten umrechnen Ben Tutorials 0 18.03.2005 07:39
gibt es "unsigned" Bytes ? terabaud Allgemeine Java-Programmierung 4 03.09.2004 20:50


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45