2016-08-03 12 views
3

Ich habe den folgenden Code und ich bin mir nicht sicher, warum die Negation in printf unterscheidet sich von der Negation außerhalb?Negation in printf

Das gedruckte Ergebnis ist FFFFFFFB und FB. Das bedeutet, ich kann sagen, dass innerhalb von printf Ausdrücke in Integer-Typen konvertiert werden (Standard-Heraufstufung) und daher 4 Bytes erscheinen!

Antwort

3

Bevor der Operator ~ ausgeführt wird, wird der Typ des Operanden auf int hochgestuft. Dies bedeutet das Ergebnis von: ~0x04 wird in Ihrem Fall 0xFFFFFFFB sein, da die Breite des Typs int scheint, 32 Bit zu sein.

Wenn der Wert 0xFFFFFFFB an printf übergeben wird, wird es nicht zu int heraufgestuft, da es bereits von diesem Typ ist, und es wird ausgedruckt.

Wenn 0xFFFFFFFB zugeordnet zurück zu d, eine Umwandlung von int zu char in einer implementierungsspezifischen Weise erfolgt. In Ihrem Fall lautet der resultierende Wert: 0xFB. Wenn d an printf übergeben wird, wird es auf int heraufgestuft, der Wert von 0xFB, wenn er auf int hochgestuft wird, bleibt gleich, und es wird ausgedruckt.