mikrocontroller.net

Forum: PC-Programmierung Aus 1 Byte ein Word erstellen ?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter B. (funkheld)


Bewertung
0 lesenswert
nicht lesenswert
Wie kann man bitte rechnerisch aus 1 Byte ein Hi-Word erstellen ?

$23 ist das Byte und es soll dann $2300 werden ?
$01 soll $0100 werden usw.

Danke.
Gruss

von Joachim D. (Firma: JDCC) (scheppertreiber)


Bewertung
-5 lesenswert
nicht lesenswert
$23 um 16 Bit nach links schieben. Platz sollte da sein.

von kyrk.5 (Gast)


Bewertung
3 lesenswert
nicht lesenswert
left shiften mit 8 bit.

von Nick M. (muellernick)


Bewertung
-1 lesenswert
nicht lesenswert
Und welcher Prozessor?
Bei 8 Bit ist ein "word" 1 Byte,
bei 16 bit 2 byte,
bei 32 bit 4 byte,
...

von Aufgemergd (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Joachim D. schrieb:
> $23 um 16 Bit nach links schieben.

oooch neeeeeeeeee!

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Joachim D. schrieb:
> 16 Bit nach links schieben

echt? rechne noch mal nach!

von Joachim D. (Firma: JDCC) (scheppertreiber)


Bewertung
-2 lesenswert
nicht lesenswert
Überraschung ;)

von Simon (Gast)


Bewertung
0 lesenswert
nicht lesenswert
oder y = x * 256;

von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht lesenswert
Die Bezeichnug "word" wurde im Lauf der Jahre viel zu unscharf, 
Mißverständnisse sind quasi vorprogrammiert. Ich versuche diese 
Gummi-Typen nicht nur im Code sondern auch in begleitendem Text zu 
vermeiden so gut es geht. Selbst in Pascal (obwohl es dort als Datentyp 
sauber definiert ist) benutze ich es nicht mehr sondern stattdessen 
UInt16/Int16 um Nicht-Pascalern beim Lesen keine unnötigen Fragezeichen 
oder gar falsche Vorstellungen in den Kopf zu pflanzen.

von Max M. (jens2001)


Bewertung
1 lesenswert
nicht lesenswert
Bernd K. schrieb:
> UInt16/Int16 um Nicht-Pascalern beim Lesen keine unnötigen Fragezeichen
> oder gar falsche Vorstellungen in den Kopf zu pflanzen.

Dafür wird dich ein "Pascaler" fragen ob .....

> in Pascal (obwohl es dort als Datentyp
> sauber definiert ist)

von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht lesenswert
Max M. schrieb:

> Dafür wird dich ein "Pascaler" fragen ob .....
>
>> in Pascal (obwohl es dort als Datentyp
>> sauber definiert ist)

In FPC ist word immer 16 bit. Delphi auch. Das sind die beiden Dialekte 
die heute noch am weitesten verbreitet sind, alles andere was heute noch 
lebt sind Nischenerscheinungen. Kennst Du einen bei dem word breiter ist 
als 16 Bit?

Und selbst wenn: Genau aus dem Grund weil dann wieder einer kommt und 
zweifelt nehm ich NICHT word und stattdessen lieber Datentypen mit 
unmißverständlcihen Namen wo ich kann, mir gehts ja gerade auch um Leser 
die nicht auswendig wissen wie breit das jetzt hier und heute zufällig 
ist, ein Datentyp mit der Zahl 16 im Namen wird im Lauf der Zeit nicht 
stillschweigend anfangen zu mutieren.

: Bearbeitet durch User
von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Bernd K. schrieb:
> Die Bezeichnug "word" wurde im Lauf der Jahre viel zu unscharf,
> Mißverständnisse sind quasi vorprogrammiert.

Eigentlich bezeichnet man damit die native Breite des Systems. Viele 
kennen es als 16 Bit, weil x86 ursprünglich mal eine 16-Bit-Architektur 
war und man das dort aus Kompatibilitätsgründen bis heute gleich 
gelassen hat. Wenn man aber z.B. das Datenblatt eines ARM liest, ist ein 
Word dort 32 Bit breit. 16 Bit ist ein Halfword.

: Bearbeitet durch User
von FS (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Rolf M. schrieb:
> Bernd K. schrieb:
>> Die Bezeichnug "word" wurde im Lauf der Jahre viel zu unscharf,
>> Mißverständnisse sind quasi vorprogrammiert.
>
> Eigentlich bezeichnet man damit die native Breite des Systems. Viele
> kennen es als 16 Bit, weil x86 ursprünglich mal eine 16-Bit-Architektur
> war und man das dort aus Kompatibilitätsgründen bis heute gleich
> gelassen hat. Wenn man aber z.B. das Datenblatt eines ARM liest, ist ein
> Word dort 32 Bit breit. 16 Bit ist ein Halfword.

...und 8-bit dann ein Quarter-Worder mit Käse. :D

Zurück zum TO: "Rechnerisch" würde bedeuten (steht auch schon weiter 
oben), den Wert mit 256 (0xff) zu multiplizieren. In der Praxis löst man 
das aber nicht rechnerisch, sondern schiebt den Wert um 8 bit nach 
links, weil es effizienter ist.

von egbert (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
FS schrieb:
> Zurück zum TO: "Rechnerisch" würde bedeuten (steht auch schon weiter
> oben), den Wert mit 256 (0xff) zu multiplizieren. In der Praxis löst man
> das aber nicht rechnerisch, sondern schiebt den Wert um 8 bit nach
> links, weil es effizienter ist.

..."rechnerisch" sind $FF jedoch "255" und nicht "256", in hexadezimaler 
Entsprechung "$100"...

von pnp (Gast)


Bewertung
1 lesenswert
nicht lesenswert
FS schrieb:
> In der Praxis löst man das aber nicht rechnerisch, sondern
> schiebt den Wert um 8 bit nach links, weil es effizienter ist.

Die allermeisten Compiler (wenn nicht sogar alle) machen in diesem Falle 
sowieso ein Shift draus. Eine Multiplikation wird es höchstens dann 
bleiben, wenn man explizit keinerlei Optimierung möchte...

von Rolf M. (rmagnus)


Bewertung
1 lesenswert
nicht lesenswert
FS schrieb:
> Zurück zum TO: "Rechnerisch" würde bedeuten (steht auch schon weiter
> oben), den Wert mit 256 (0xff) zu multiplizieren. In der Praxis löst man
> das aber nicht rechnerisch, sondern schiebt den Wert um 8 bit nach
> links, weil es effizienter ist.

Auf jedem halbwegs optimierenden Compiler sollten diese Operationen zu 
identischem Code führen. Ich würde dennoch den Shift nehmen, weil es die 
Intention besser ausdrückt. Und auf dem PC macht das sowieso selten 
einen signifikanten Unterschied.

von Peter B. (funkheld)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die Info.

Ich werde schieben rechts und links.

Gruss

von Larry (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Da Hi-Word, also das "most significant byte" des Wortes,
wird wohl wenn es einem Byte entschluepft, immer Null sein.

Da braucht man nicht mal schieben!

von leo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Larry schrieb:
> Da braucht man nicht mal schieben!

Und du hast die originale Post des TO gelesen?

leo

von Larry (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Und du hast die originale Post des TO gelesen?

Bis auf den Lapsus, dass nicht das Hi-Word null werden soll,
sondern das Lo-Word, bleibt es dabei.
> Da braucht man nicht mal schieben!

C-Programmierer koennen scheinbar nur Ramsch spielen. Sie schieben.
Und auf den Optimierer ihres Compilers vertrauen.

von Andreas B. (bitverdreher)


Bewertung
0 lesenswert
nicht lesenswert
Peter B. schrieb:
> Danke für die Info.
>
> Ich werde schieben rechts und links.
>
Nur links! ;-)

von Percy N. (vox_bovi)


Bewertung
0 lesenswert
nicht lesenswert
Nick M. schrieb:
> Und welcher Prozessor?
> Bei 8 Bit ist ein "word" 1 Byte,
> bei 16 bit 2 byte,
> bei 32 bit 4 byte,
> ...

Prozessor ist wurscht, und bzgl Wortlänge:
Lies noch mal die Frage ...

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Larry schrieb:
>> Und du hast die originale Post des TO gelesen?
>
> Bis auf den Lapsus, dass nicht das Hi-Word null werden soll,
> sondern das Lo-Word, bleibt es dabei.

Wo meinst du, das gelesen zu haben?

>> Da braucht man nicht mal schieben!

Also hast du es nicht gelesen. Solltest du mal, damit du die 
Aufgabenstellung verstehst.

Larry schrieb:
> C-Programmierer koennen scheinbar nur Ramsch spielen. Sie schieben.

Was hat das denn mit C zu tun? Ich würde da in jeder Sprache schieben.

> Und auf den Optimierer ihres Compilers vertrauen.

Wenn man dem Optimizer nicht trauen darf, dann ist der Compiler Mist. 
Das ist ebenfalls unabhgängig von der Sprache.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.