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.
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.
020
ist 20 in oktal , genauso wie 0x20
20 in Hex ist. Entferne die vorhergehende 0 und es sollte funktionieren.
Die führende 0 gibt an, dass es sich um eine Oktalzahl handelt (Basis 8), also 20 in Oktal ist 16.
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. :)
Tags und Links c++ operator-overloading