2016-08-09 39 views
3

ändern WarumWarum eine 0 vor der Zahl seinen Wert

var_dump(16) // displays int(16) 

aber

var_dump(016) // displays int(14) 

Jeder kann sich das Hinzufügen mir helfen, dieses Problem zu lösen?

+0

Da '016' als Oktalzahl interpretiert wird – Rizier123

+3

Weil "Zahlen" mit beginn eine Null in PHP wird als oktal behandelt, und oktal 16 ist dezimal 14 ... das hat nichts mit var_dump zu tun, und alles, was damit zu tun hat, wie du die Zahl deklarierst - [PHP Documentation] (http://php.net /manual/en/language.types.integer.php) –

Antwort

3

Der zweite Wert wird oktal genannt. Es ist nicht das gleiche wie Base 10. Stattdessen ist es Base 8. Wenn Sie die 0 in Front hinzufügen, teilt es PHP mit, es als Oktal zu behandeln.

http://php.net/manual/en/language.types.integer.php

Integers kann oktal (Basis 8) oder binär (Basis 2) Notation, die gegebenenfalls durch ein Zeichen (voran in dezimalem (Basis 10), hexadezimal (Basis 16), festgelegt werden - oder +).

Um die Oktalnotation zu verwenden, muss der Zahl eine 0 (Null) vorangestellt werden.

10 in der Basis 8 8

6 in der Basis 8 6

8 + 6 = 14

+0

... und, wenn Sie * vorhaben "Octal durchgängig zu verwenden", müssten Sie su sein Dieses Ergebnis, "vierzehn", wurde in ** oktaler ** Notation angezeigt (komplett mit einer führenden Null, um anzuzeigen, dass es * oktal ist). Das Fehlen einer führenden Null würde bedeuten, dass "14" (Basis-10) "vierzehn" ist, aber "dies ist ein Fehler, der sehr einfach zu machen ist * und * sehr einfach für menschliche Sterbliche, wenn sie es übersehen versuchen, das Ding zu debuggen. * (Yeah, "war da, habe das getan ..." Ich knallte meine Stirn genau gegen dieses Problem, bevor ich sagte: "Oh!") * –

+0

Hewlett-Packard Minicomputer (HP1000, HP2000, HP3000, * usw.) * verwendeten routinemäßig die Oktalnotation, und * sie * verwendeten die Konvention, ein vorangestelltes Prozentzeichen "%" zu verlangen. Sie würden auch immer die richtige Anzahl von Ziffern schreiben, Dies zeigt deutlich nicht nur, was der Wert war, sondern auch, wie viele Bits er belegte.Ihre Sprachkompilierer würden diese Konvention ebenfalls honorieren.In ähnlicher Weise würden hexadezimale * (Basis-16) * - Zahlen ein vorangestelltes "$" - Zeichen verwenden. Ich mag * diese Konvention, weil es sehr menschlich ist - klar, aber nicht - alle Sprachen machen die Dinge auf die gleiche Weise. –