logische Verschiebung rechts auf signierten Daten

8

Vor allem, nein, das ist nicht meine Hausaufgabe, es ist ein Labor, gegeben durch ein Buch mit dem Titel "Computer Systems A Programmer's Perspective" (Ausgezeichnetes Buch btw)

Ich muss eine logische Verschiebung für Ganzzahlen mit Vorzeichen ausführen, ohne Folgendes zu verwenden:

  • Casting
  • wenn, while, select, für, do-while,?:
  • Zeiger eines beliebigen Typs

Erlaubte Operatoren sind: ! + ~ | & gt; & gt; & lt; & lt; ^

Was habe ich bisher versucht?

%Vor%

Dies funktioniert gut, solange n nicht gleich 0 ist, wenn dieser Code bricht, weil die Maske zu allen 0s wird und die Funktion 0 zurückgibt.

Ich würde einen Hinweis eher in die richtige Richtung als in einen vollständigen Code begrüßen.

Auch dies ist keine Hausaufgabe; Die Labor-Aufgaben sind hier öffentlich zugänglich Ссылка

P.S Nicht ein Duplikat, posten Sie keine Lösungen, bei denen die Umwandlung in unsigned und dann shifting erfolgt.

    
Fingolfin 04.11.2012, 18:08
quelle

1 Antwort

4

Sie können eine Maske auf diese Weise erstellen:

%Vor%

Was im Vergleich zu dem anderen Ansatz so ist

%Vor%     
harold 04.11.2012, 19:01
quelle