Bedeutung von% x und ~

9
%Vor%

Die Ausgabe dieser Anweisung lautet ffdf und ohne ~ Ausgabe ist 20 . Was ist die Bedeutung von %x und ~ ?

    
Brite Roy 17.01.2012, 19:32
quelle

6 Antworten

20

Der Operator ~ ist eine bitweise Negation. Es wird die bitweise Negation des m -Werts gedruckt. %x bedeutet, dass printf seinen Wert im Hexadezimalformat ausgibt.

Also ist der Wert 0xffdf die Negation des Wertes 0x20 (32).

Wert 32 (int Bits wären):

%Vor%

Seine bitweise Negation wird sein:

%Vor%

Was macht Sinn seit:

%Vor%

Und:

%Vor%     
Pablo Santa Cruz 17.01.2012, 19:34
quelle
6

Das %x ist das printf -Format , das angibt, dass der int -Wert angezeigt werden soll in hexadezimal.

Das ~ ist bitweise NICHT , wodurch alle Bits in der ganzen Zahl umgedreht werden.

Die Aussage:

%Vor%

zeigt die Ausgabe 20 als 0x20 = dezimal 32 .

an

Die Aussage:

%Vor%

zeigt die Ausgabe ffdf als 0xffdf ist die bitweise Umkehrung von 0x20 .

Es mag sinnvoller sein, die bitweise Negation im Binärformat zu visualisieren:

%Vor%     
Edward Thomson 17.01.2012 19:36
quelle
2

Das Symbol% ​​co_de% steht für den bitweisen NICHT oder Komplementoperator ; eine unäre Operation, die für jedes Bit eine logische Negation durchführt , die das Einerkomplement des gegebenen binären Wertes bildet. Binärziffern, die 0 sind, werden 1 und diejenigen, die 1 sind, werden 0.

32 ist 00100000 binär und ~ 32 ist 11011111 binär (oder 223 dezimal).

Die Option ~ in der Funktion %x zeigt ein unsigniertes hexadezimales Format (in Kleinbuchstaben) an.

Also,

%Vor%


[Quellen]
Ссылка
Ссылка
Ссылка

    
Omar 17.01.2012 20:04
quelle
1

Und% x bedeutet, dass Sie den Wert von x im Hexadezimalsystem ausgeben.

    
delannoyk 17.01.2012 19:36
quelle
1

~ 32 = -33 verwendet unsigned int, um Ergebnisse zu erhalten

    
Fedor Igumnov 17.01.2012 19:44
quelle
1

Dies bedeutet, dass x wahrscheinlich eher als unsigned und nicht als int deklariert wurde.

Das "%x" printf-Format erfordert ein unsigned int -Argument und gibt seinen Wert in hexadezimal (Basis 16) aus. Sie können es sicher mit einem int Argument verwenden wenn der Wert innerhalb des Bereichs liegt, der entweder als int oder als unsigned int (d. H. 0 .. INT_MAX ) dargestellt werden kann. Die Verwendung von "%x" mit einem negativen int -Wert, wie dieses Codefragment genau hat, hat undefiniertes Verhalten, obwohl das tatsächliche Verhalten wahrscheinlich ziemlich konsistent ist.

Der C-Standard sagt:

  

Das Ergebnis des Operators ~ ist das bitweise Komplement seiner   (promoed) Operand (dh jedes Bit im Ergebnis wird genau dann gesetzt   wenn das entsprechende Bit im konvertierten Operanden nicht gesetzt ist).

Beachten Sie, dass es in der -Darstellung des Operanden definiert ist, nicht in seinem Wert.

Die Ausgabe, die Sie beschreiben, zeigt an, dass Sie ein System mit vorzeichenbehafteten Zweierkomplement-Ganzzahlen verwenden, wobei int nur aus 16 Bits besteht, was heutzutage ungewöhnlich ist. (Verwenden Sie einen alten Turbo C Compiler oder etwas ähnliches?) Auf meinem System, dieses Programm:

%Vor%

erzeugt diese Ausgabe:

%Vor%

(Beachten Sie, dass ich die erforderliche #include <stdio.h> und ein Semikolon für die Deklaration von m hinzugefügt habe.)

    
Keith Thompson 17.01.2012 20:00
quelle

Tags und Links