zwei 8 bit zu 16 bit
-
hallo,
ich hätte da auch eine frage. sie bezieht sich auf das, was campionissimo geschrieben hat:
campionissimo schrieb:
Hallo,
danke.
Das ganze hatt ich schon ausprobiert und bin dann in die Zeile ohne die verschiebung gekommen und dachte es geht nicht. Naja jetzt passt es wieder.
Wie kann ich das ganze im detail verstehen.high low
11110000 00001111
addition
erg 11111111
high<<8 low
11110000 00000000 00001111
erg 1111000000001111
Richtig ?danke
das verstehe ich nicht, warum ist 10010001 (=145 als dezimalzahl) als hight-byte 11110000 (=240 als dezimalzahl)?
das gleiche bei low-byte.ich mein, 145!=240
könnte mir das mal bitte jemand erklären?
-
Wo steht in dem Zitat, das du von campionissimo hast, etwas von 145?
Die 145 stehen im ersten Post. Und das ist ein ganz anderes Beispiel.
-
ok, das hab ich dann wohl falsch verstanden.
aber bei 145, was ist da low-byte und high-byte?
145 dezimal = 10010001 binär
-
145 ist nur ein Byte, das hat keinen High- und keinen Low-Anteil. Oder wenn du so möchtest, kannst du sagen es hat low 145 und high 0.
Das ist so gemeint: Das was man klassischerweise ein Datenwort nennt (aus den Zeiten als diese heißen neuen 16 Bit Rechner auf den Markt kamen), besteht aus zwei Bytes (klassisch: Zahlen von 0 bis 255). Das heißt, es ist eine 16 Bit Zahl, 0 bis 65767. Davon nennt man das niederwertige Byte (das heißt das hintere Byte in Binärschreibweise, das was für die hinteren Stellen verantwortlich ist) das Low-Byte und das andere das High-Byte.
Wenn du ein bisschen Fit bist mit unterschiedlichen Zahlensystemen: Die hinteren 8 Ziffern im Binärsystem sind low, die vorderen High. Oder im Hexadezimalsystem die hinteren bzw. die vorderen zwei Ziffern. Oder im 256er System die erste bz.w die zweite Ziffer.
-
ok, das alles geht aber nur bei 16 bit? (auch bei 32 bit? allgemein bei bytes, die durch 2 zeilbar sind, z. B. 64?)
ein kleines beispiel:
die zahl 43690, in binär 1010101010101010;
davon sind jetzt also die ersten 8 bits (10101010) ist das high-byte und die letzten 8 bits (wieder 10101010) sind dann also low-byte.ist das so richtig?
-
Ja.
Schau auch mal bei http://de.wikipedia.org/wiki/Endianness
-
danke.
ich habe versucht, diesen code in c umzusetzen:
campionissimo schrieb:
Hallo,
danke.
Das ganze hatt ich schon ausprobiert und bin dann in die Zeile ohne die verschiebung gekommen und dachte es geht nicht. Naja jetzt passt es wieder.
Wie kann ich das ganze im detail verstehen.high low
11110000 00001111
addition
erg 11111111
high<<8 low
11110000 00000000 00001111
erg 1111000000001111
Richtig ?danke
mein ergebnis:
#include <stdio.h> int main() { int a=240; // = binär 11110000 int b=15; // = binär 00001111 int c=240|15; // liefert das ergebnis 255 (= binär 11111111) stimmt also mit dem oben überein unsigned int d=a<<8+b; // liefert NICHT das ergebnis aus dem obrigen code // mein ergebnis: 2013265920 (= binär 1111000000000000000000000000000 ) printf("c = %d\n",c); printf("d = %u\n",d); return 0; }
wo liegt da der fehler?
-
Dass << eine niedrigere Präzedenz hat als +...
Aber auch dann sollte dort statt einer 8 eine 4 stehen, wenn du 11111111 als Ergebnis sehen willst
-
@dot: viele dank, da hab ich die klammern vergessen.
jetzt kommt auch das gewünsche ergebnis raus.
was meinst du mit 4 statt 8? so wie es oben steht, scheint es zu stimmen, c ist 255.
-
Sry, das mit 4 statt 8 war natürlich Schwachsinn
-
Hallo,
ich habe anfang zwei 8 bit ströme gezeigt.
die werden einzeln gerechnet.
z.B.erste acht bit
11000111
ergibt 199
zweite acht bit
00101001
eribt 41
wenn ich das auf 16 bit zusammenfüge sind es
0010100111000111
10695
und hier gibt es 8 bit high und 8 bit low
Beim ersten gibt es keine 8 bit high.
Gruß