Hallo, kann mir jemand bei der Berechnung von High und Lowbyte helfen ? Ich müßte die Zahl 12288 zerlegen. Wie mach ich das ? Und was ist ein MSB, und wie setze ich das auf 1 ? Bitte um Hilfe Danke
Hi Andi, Das High-Byte ist jenes Byte aus Deinem 16-Bit-Wert, das die 8 hoechstwertigen Bits beinhaltet, das Low-Byte die 8 niederwertigsten. Das MSB ist das "most significant bit" also das hoechstwertige Bit in dem Wert. Du bekommst die Werte heraus, indem Du sie maskierst: uint16t two_bytes = 0x1234; uint8t high_byte = two_bytes & 0xff00; uint8t low_byte = two_bytes & 0x00ff; Um das MSB auf 1 zu setzen: uint16t two_bytes |= (1 << 16); Ob das niederwertigste Bit von links oder von rechts beginnt kann auf unterschiedlichen Architekturen unterschiedlich sein. Beginnt es links, also an der kleinsten Speicheradresse (wie z.B. auf jeder Intel-Architektur) spricht man von little endian, andernfalls von big-endian-Systemen. Lieber Gruss, Michael
andi wrote: > Hallo, kann mir jemand bei der Berechnung von High und Lowbyte helfen ? > Ich müßte die Zahl 12288 zerlegen. Wie mach ich das ? So, wie Du Deine Zahl in 5 Ziffern (Wertebereich 0 bis 9) zerlegt hast, so kannst Du die Zahl auch in zwei Bytes (Wertebereich 0 bis 255) zerlegen. > Und was ist ein > MSB, MSB = Most Significant Bit, also höchstwertigstes Bit. > und wie setze ich das auf 1 ? Durch VerOdeRn (OR). > > Bitte um Hilfe Naja, das riecht wiedermal nach Hausaufgaben. Der Dumme macht sich selbst sachkundig, der Clevere lässt Andere für sich arbeiten indem er fragt... > > Danke ...
> uint16t two_bytes |= (1 << 16);
Das MSB eines 16 bit Wortes wäre 1 << 15 ;)
Gruß,
Dominic
Also, 48 ist binär 110000. wenn das msb der oberste wert ist, müßte es doch 1011000 sein, also 176.......oder ?
Dominic R. wrote: >> uint16t two_bytes |= (1 << 16); > > Das MSB eines 16 bit Wortes wäre 1 << 15 ;) > > Gruß, > > Dominic Ja... Dominic hat recht, verzeihe er mir den Fehler ;) Die Stellenwertigkeit des n-ten Bits ist natuerlich 2^(n-1) Und Andi: So nen bisschen Grundlagen solltest Dir vielleicht anlesen. Die Beispiele in C lassen sich natuerlich auf jede andere Sprache uebertragen...
MSB hat zwei Bedeutungen: - Most Significant Bit z.B. bei serieller Datenübertragung - Most Significant Byte z.B. bei der Zahlendarstellung in Rechner Vermutlich ist gemeint, Du sollst das höchste Bit der Zahl setzen: MSB | v 12288 = 0x3000 = 0b0011000000000000 45056 = 0xb000 = 0b1011000000000000 @Michael "uint8t high_byte = two_bytes & 0xff00;" uint8t high_byte = (two_bytes & 0xff00) >> 8; oder gleich uint8t high_byte = two_bytes >> 8; Einfacher ist es, eine Union zu definieren und auf das entsprechende Byte direkt zuzugreifen. Das ist allerdings nicht portabel und abhängig von der Rechnerarchitektur.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.