swap-befehl in C?

#502985
Lesenswert?
• ▲
▼
((byte << 4)&0xF0)

Wozu willst du den &0xF0?

Beim Linksschieben kommen von rechts immer 0-en nach.

((byte >> 4)&0x0F);

Der ist in Ordnung. Abhängig davon ob byte signed oder
unsigned ist und vom tatsächlichen Wert von byte können
da von links auch 1-en reingeschoben werden.
Gast #502999
Lesenswert?
• ▲
▼
@Karl Heinz:
Jau, ist natürlich richtig. Ich war jetzt von unsigned ausgegangen, da 
es i.d.R. auch wenig Sinn macht, was vorzeichenbehaftetes zu "swappen". 
Aber man weiß ja nie, wo die Leute so drauf kommen und auch was der 
Compiler draus macht. Die Methode von C-Rahul ist mit Sicherheit die 
sicherste.
Gast #503025
Lesenswert?
• ▲
▼
darum habe ich auch geschrieben "ganz manchmal".
Denn ich verlasse mich nicht darauf, dass der Compiler das Carry vorher 
löscht oder einen Assemblerbefehl benutzt, sofern vorhanden, welcher 
automatisch Nullen nachschiebt.
Aber ein einfacher Blick in den assemblierten Code hilft natürlich auch, 
ob man sich diese Gaudi sparen kann.
Gast #503099
Lesenswert?
• ▲
▼
> Denn ich verlasse mich nicht darauf, dass der Compiler das Carry vorher
> löscht oder einen Assemblerbefehl benutzt, sofern vorhanden, welcher
> automatisch Nullen nachschiebt.

Es soll ja Compiler geben, denen die C-Norm vollkommen egal ist, aber 
bei einem halbwegs vernünftigen Compiler kannst du dich schon darauf 
verlassen, daß er solch triviale Dinge korrekt umsetzt. Wenn nicht, 
würde ich ihn wegwerfen und durch einen besseren ersetzen.
Admin Persönliche Seite #503101
Lesenswert?
• ▲
▼
C-Rahul wrote:
> darum habe ich auch geschrieben "ganz manchmal".
> Denn ich verlasse mich nicht darauf, dass der Compiler das Carry vorher
> löscht oder einen Assemblerbefehl benutzt, sofern vorhanden, welcher
> automatisch Nullen nachschiebt.

Das steht in der Definition des <<-Operators. Wenn du deinem C-Compiler 
die korrekte Umsetzung eines so einfachen Operators nicht zutraust, dann 
ist wohl ein Wechsel eine gute Idee.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.