ByteKit

Status
Nicht offen für weitere Antworten.
R

rafael

Gast
Hallo Zusammen

Ich habe heute Morgen angefangen, das Buch GoToJava 2 zu lesen. Was auch gleich meine ersten Schritte im Programmieren sind. :bae:
Nun habe ich aber schon das erste Problem :applaus:

Ich Versteh einfach folgende Teil einer Classe nicht:

Code:
/** 
	 * Wandelt c in ein Byte um das High-Byte wird ignoriert.
	 */
	public static byte fromChar(char c)
	{
		return (byte)(c & 0xFF);
	}
	/**
	 * Betrachtet Value als vorzeichenloses byte und wandelt es in eine 
	 * Ganzzahl im Bereich 0-255 um-
	 */
	public static int toUnsignedInt(byte value) 
	{
		return (value & 0x7F) + (value < 0 ? 128 : 0);
	}

Naja was passiert steht ja und bei der ersten Methode komme ich auch noch soweit draus.
Ich schliesse aus dem Kommentar dass 0xFF dazu da ist, das "High-Byte" zu ignorieren.
Aber bislang habe ich noch nie etwas von einem Hig-Byte gelesen/gehört.

Der Sinn der 2. Methode verstehe ich noch und natürlich auch was es bewirkt, aber Was macht Was?

Danke euch!!

Grüsse rafael
 

Marco13

Top Contributor
Ein char besteht aus 2 bytes. Das High-Byte ist einfach "das linke" :wink:

Die andere Methode :? hm ... könnte man wohl auch anders und vielleicht übersichtlicher schreiben. Durch das (value & 0x7F) wird das vorderste Bit des bytes weggeworfen. Das vorderste ist das, das eigentlich für das Vorzeichen verantwortlich ist. Wenn die Zahl negativ war (also das Bit gesetzt war) wird es durch das +128 wieder hingeschrieben. Mach' dir vielleicht mal mit Karopapier klar, warum 128(dec) == 0x80(hex) ist, und dass 0x7F + 0x80 == 0xFF ist - immer mit dem Gedanken im Hinterkopf, dass das Bit, das bei 0x80 gesetzt ist, in einem byte das Vorzeichen bestimmt. Ggf. auch mal hier drüberschauen http://de.wikipedia.org/wiki/Zweierkomplement
 
G

Guest

Gast
Hallo und danke für die gute Antwort


128(dec) == 0x80(hex) hab ich begriffen (mich hat das 0x verwirrt, aber das steht ja nur für Hex) :applaus:
Marco13 hat gesagt.:
Durch das (value & 0x7F) wird das vorderste Bit des bytes weggeworfen. Das vorderste ist das, das eigentlich für das Vorzeichen verantwortlich ist.
und
Marco13 hat gesagt.:
immer mit dem Gedanken im Hinterkopf, dass das Bit, das bei 0x80 gesetzt ist, in einem byte das Vorzeichen bestimmt.
Ich bin anfangs nicht draus gekommen weil 0x80 ist 128 und ich hab automatisch gedacht dass das letzte den höchsten wert gibt, aber es ist natürlich das erste.


Aber weshalb (value & 0x7F) also & 127, man will ja das erste bit weg bekommen, inwiefern "zielt" 0x7F auf das erste bit?

Danke und Grüsse Rafael
 

xysawq

Bekanntes Mitglied
Da du & benutzt (also ver-UND-est) ließt du nur das, was im bereich deines wertes liegt...

& 0x7F heißt also, du behältst alle bits außer das erste, das blendest du aus...
 
G

Guest

Gast
xysawq hat gesagt.:
Da du & benutzt (also ver-UND-est) ließt du nur das, was im bereich deines wertes liegt...

& 0x7F heißt also, du behältst alle bits außer das erste, das blendest du aus...

super danke
Operatoren kommen leider erst später im Buch :cry:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben