Language.types.integer

Aus PHP-Wiki

Wechseln zu: Navigation, Suche
Rechtsschutzversicherung und UnfallversicherungKFZ Versicherung . Kinderbett Jonathan von Wellemöbel

Integer Typen

Ein Integer ist eine Zahl aus der Menge Z = {..., -2, -1, 0, 1, 2, ...}.

Siehe auch: ref.gmp, language.types.float und ref.bc

Inhaltsverzeichnis


Syntax

Ganzzahlen können in dezimaler (10-basierter), hexadezimaler (16-basierter) oder oktaler (8-basierter) Schreibweise angegeben werden, wahlweise mit einem vorangestellten Zeichen (- oder +).

Wenn Sie die oktale Schreibweise verwenden, müssen Sie die Zahl mit einer vorangestellten Null 0 schreiben; in hexadezimaler Schreibweise müssen Sie vor die Zahl ein 0x schreiben.


Beispiel 6-1. Integer Literale

<?php
$a
= 1234; // Dezimalzahl
$a = -123; // eine negative Zahl
$a = 0123; // Oktalzahl (entspricht 83 dezimal)
$a = 0x1A; // Hexadezimalzahl (entspricht 26 dezimal)
?>
Formell ist die mögliche Struktur für Integer Literale:

<P ></P >
dezimal     : [1-9][0-9]*             | 0  hexadezimal : 0[xX][0-9a-fA-F]+  oktal       : 0[0-7]+  integer     : [+-]?dezimal             | [+-]?hexadezimal             | [+-]?oktal
<P ></P >
Die Größe eines Integer-Wertes ist plattformabhängig, ein Maximalwert von ungefähr zwei Milliarden ist jedoch üblich (vorzeichenbehafteter 32-Bit-Wert). PHP unterstützt keine vorzeichenlosen Integer-Werte.


Integer Überlauf

Wenn Sie eine Zahl jenseits der Grenzen des Typs Integer angeben, wird diese stattdessen als Typ language.types.float interpretiert. Wenn Sie eine Operation ausführen, deren Ergebnis eine Zahl jenseits der Grenzen des Typs Integer ist, wird ebenso eine Zahl vom Typ language.types.float zurückgegeben.


<P ></P >
<?php
$grosse_zahl
=  2147483647;
var_dump($grosse_zahl);
// Ausgabe: int(2147483647)

$grosse_zahl =  2147483648;
var_dump($grosse_zahl);
// Ausgabe: float(2147483648)

// das gilt auch für Integers in hexadezimaler Schreibweise:
var_dump( 0x80000000 );
// Ausgabe: float(2147483648)

$million = 1000000;
$grosse_zahl =  50000 * $million;
var_dump($grosse_zahl);
// Ausgabe: float(50000000000)
?>
<P ></P >
<P ></P >
Warnung

Bedauerlicherweise gab es einen Bug in PHP, der die korrekte Funktionsweise verhinderte, wenn negative Zahlen verwendet wurden. Ein Beispiel: Bei der Ausführung von -50000 * $million war das Ergebnis -429496728. Sind beide Operanden positiv gibt es keine Probleme.

Dieses Problem ist in PHP 4.1.0 behoben worden.

In PHP gibt es keinen Operator für Integer-Divisonen. 1/2 ergibt language.types.float 0.5. Sie können den Wert in einen Integer umwandeln, um ihn immer abzurunden oder die Funktion function.round benutzen.


<P ></P >
<?php
var_dump
(25/7);         // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4)
?>
<P ></P >


Umwandlung nach integer

Um einen Wert ausdrücklich nach language.types.integer zu konvertieren, benutzen Sie entweder die Umwandlung mittels (int) oder (integer). In den allermeisten Fällen ist es jedoch nicht notwendig die Umwandlung selbst vorzunehmen. Ein Wert wird automatisch konvertiert, falls ein Operator, eine Funktion oder eine Kontrollstruktur ein language.types.integer Argument erfordern. Sie können einen Wert auch mit der Funktion function.intval in einen Integer umwandeln.

Siehe auch language.types.type-juggling.


Von language.types.boolean

FALSE ergibt 0 (Null), und TRUE ergibt 1 (Eins).


Von language.types.float

Bei der Umwandlung von language.types.float nach integer wird die Zahl in Richtung Null gerundet.

Wenn der float jenseits der Grenzen von integer liegt (üblicherweise +/- 2.15e+9 = 2^31), ist das Ergebnis nicht definiert, weil float nicht genug Präzision besitzt um ein genaues integer Ergebnis zu liefern. Keine Warnung, nicht einmal eine Notiz wird in diesem Fall ausgegeben.

Warnung

Wandeln Sie nie einen Teil eines Ausdrucks nach language.types.integer um, da dies manchmal zu unerwarteten Ergebnissen führen kann.


<P ></P >
<?php
echo (int) ( (0.1+0.7) * 10 ); // Ausgabe: 7!
?>
<P ></P >
Für mehr Informationen schauen Sie unter language.types.float#warn.float-precision Warnung über float-Präzision nach.


Von anderen Typen

<P ></P >
Achtung

Das Verhalten bei der Umwandlung nach integer ist für andere Typen nicht definiert. Zum gegenwärtigen Zeitpunkt ist das Verhalten so, als ob der Wert zuerst nach language.types.boolean#language.types.boolean.casting boolean konvertiert wird. Auf jeden Fall sollten Sie sich auf dieses Verhalten nicht verlassen. Es kann sich ohne Ankündigung ändern.

Persönliche Werkzeuge