Überladen von Inserenten und merkwürdiger Ausgabe (für '20' und '020') [duplizieren]

7

Ich habe gelernt, "& lt; & lt;" in einem sehr einfachen Programm, & amp; Während meines Studiums fand ich die folgende überraschende Ausgabe meines Programms.

%Vor%

irgendwelche Erläuterungen bitte

    
nobalG 11.08.2011, 13:48
quelle

6 Antworten

11

0 ist das oktale Präfix für C ++ Ganzzahlliterale und 20 in oktal ist 16 in Dezimal.

Zur weiteren Erläuterung: Wenn ein Literal mit 0 beginnt, wird der Rest der Zahl in oktaler Darstellung interpretiert. In Ihrem Beispiel 2 * 8 ^ 1 + 0 * 8 ^ 0.

Die Syntax für Integer-Literale ist in §2.14.2 im neuesten Standardentwurf angegeben.

    
pmr 11.08.2011, 13:51
quelle
5
%Vor%

Sie haben 020 geschrieben, was in C und C ++ als eine oktale Zahl (Basis 8) aufgrund der Null am Anfang interpretiert wird. Also hat 020 den Wert 16 in Dezimal.

    
jcoder 11.08.2011 13:52
quelle
3

Sie finden die Antwort hier:

Wie funktioniert C Behandeln Sie Integer-Literale mit führenden Nullen und was über atoi?

Sie haben dem Literal eine Null vorangestellt, was bedeutet, dass Sie die Zahl als oktal und 20okt als 16dez behandeln.

    
Skizz 11.08.2011 13:52
quelle
2

020 ist 20 in oktal , genauso wie 0x20 20 in Hex ist. Entferne die vorhergehende 0 und es sollte funktionieren.

    
user786653 11.08.2011 13:53
quelle
1

Die führende 0 gibt an, dass es sich um eine Oktalzahl handelt (Basis 8), also 20 in Oktal ist 16.

    
love_me_some_linux 11.08.2011 13:53
quelle
1

Es interpert die 020 als Oktal. 2 * 8 = 16. Versuchen Sie, es auf eine 3 zu schalten, zeigt 24 für 030 an. Wenn Sie 0x20 setzen, geht es zu 32, weil es hexadezimal tut. :)

    
John Humphreys - w00te 11.08.2011 13:55
quelle

Tags und Links