Warum ist die linke Verschiebung eines negativen vorzeichenbehafteten Werts kein wohldefiniertes Verhalten? [Duplikat]

9

Diese Frage wurde in einem Interview gestellt.

Aus diesem Grund hat die linke Verschiebung << eines negativen Wertes undefiniertes Verhalten , während die rechte Verschiebung >> einer negativen vorzeichenbehafteten Zahl implementierungsdefiniertes Verhalten ?

C11 $ 6.5.7:

Absatz 4:

  

Das Ergebnis von E1 & lt; & lt; E2 ist E1 linksverschobene E2-Bitpositionen; geräumt   Bits sind mit Nullen gefüllt. Wenn E1 einen vorzeichenlosen Typ hat, wird der Wert von   das Ergebnis ist E1 x 2 ^ E2, modulo um eins mehr als der Maximalwert reduziert   darstellbar im Ergebnistyp. Wenn E1 einen signierten Typ hat und   nicht negativer Wert, und E1 x 2 ^ E2 ist im Ergebnistyp darstellbar,   dann ist das der resultierende Wert; Ansonsten ist das Verhalten   nicht definiert.

Absatz 5:

  

Das Ergebnis von E1 & gt; & gt; E2 ist E1 rechtsverschobenes E2-Bit   Positionen. Wenn E1 einen Typ ohne Vorzeichen hat oder E1 einen Typ mit Vorzeichen hat und a   nicht negativer Wert, der Wert des Ergebnisses ist der integrale Teil der   Quotient von E1 / 2 ^ E2. Wenn E1 einen Typ mit Vorzeichen und einen negativen Wert hat,   Der resultierende Wert ist implementierungsdefiniert.

Warum ist die linke Verschiebung eines negativen vorzeichenbehafteten Werts kein wohldefiniertes Verhalten?

    
Jayesh 23.06.2017, 06:24
quelle

0 Antworten