C Bitverschiebungsverhalten

8

Ich habe dieses Beispiel gefunden, kann mir jemand erklären, was hier vor sich geht? Ich benutze LLVM 7.1.

%Vor%

a und b sollten gleich sein?

BEARBEITEN: Die Demontage hinzugefügt:

%Vor%     
iCaramba 27.04.2016, 12:30
quelle

1 Antwort

10

Im ersten Fall wird ~a zu int hochgestuft, also erhalten Sie:

%Vor%

wird auf 0x80 gekürzt.

Im zweiten Fall geschieht die Kürzung vor der Verschiebung, also erhalten Sie:

%Vor%

wird auf 0x00 gekürzt, und dann wird das Ergebnis von 0x00 verschoben.

(Anmerkung: das obige setzt 32-Bit-Inte, normale 2s-Komplement-Darstellung und logische Verschiebung nach rechts von vorzeichenbehafteten Werten voraus.)

    
Paul R 27.04.2016, 12:35
quelle

Tags und Links