![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benutzer Registriert seit: 19.03.2005
Beiträge: 35
|
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 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;
}
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 |
| | |
| | Nach oben #3 |
| Erfahrener Benutzer Registriert seit: 29.05.2004
Beiträge: 228
|
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 |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ä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 |