Quakenet/#php Tutorial

Hinweis: Wenn sie diese Seite von einer externen URL aufgerufen haben achten sie darauf das alle Kapitel aufeinander aufbauen. Stellen sie daher sicher dass sie alle vorherigen Kapitel gelesen haben, da sie sonst relevante Informationen übersehen.

Zahlen

  1. Datentyp Zahlen
  2. Integer-Zahlen
  3. Float-Zahlen
  4. Speicherverwaltung von Integer- und Float-Zahlen

1. Datentyp Zahlen

Wenn man in seinen PHP-Skripten mit Variablen(inhalten) rechnen möchte muss man dazu einen Datentyp benutzen der dazu dient Zahlen darzustellen. Eine naive Möglichkeit ist es die Zahlen in Strings zu schreiben und damit zu rechnen.

<?php
echo "5"+"9";
?>

Dies gibt wie erwartet 14 aus. Hier haben wir jedoch Strings miteinander addiert. In der Regel klappt dies nicht, hier hat jedoch Typecasting zugeschlagen und die Strings vorher in echte Zahlen umgewandelt. Für Zahlen gibt es in PHP zwei Datentypen. Dies sind einmal Integer-Zahlen und einmal Float-Zahlen.

2. Integer-Zahlen

Integer-Zahlen sind ganzzahlige Werte, enthalten also kein Nachkommastellen. Beispiele sind 5, 31 oder 199, aber auch negative Zahlen wie -1, -10 oder -44. In PHP schreibt man Integer-Zahlen einfach in den Quelltext, der PHP-Interpreter erkennt diese Ziffernfolge als Zahl.

<?php
$var 
5;
$var2 31;
$var3 = -10;
?>

Es ist auch möglich Integer-Zahlen in Hexadezimaler- und Oktaler-Notation anzugeben, wenn man denn die Umrechnung im Kopf hat. Für die hexadezimaler Schreibweise verwendet man den Präfix 0x, für die oktaler Schreibweise hingegen nur den Präfix 0 (normale Integer-Zahlen starten direkt mit der höchsten Ziffer oder sind eh nur die Zahl 0).

<?php
$var 
0xFF// hexadezimal (255), oft bei protokollen verwendet
$var2 0763// octal (499), oft bei chmod verwendet
$var3 0// normale null, hier ist es eh egal ob hex-, oct- oder dezimal
?>

3. Float-Zahlen

Float-Zahlen sind Werte mit Nachkommastellen, Beispiele davon sind 5.7, 12.25 oder -4.07, aber auch 10.0, 3.1E-10 oder 4.5e3.

<?php
$var 
5.7;
$var2 3.1E-10;
$var .1;
?>

Float-Zahlen erkennt man an den Dezimalpunkt ., des Weiteren wird nicht ein Kommata (,) für die Nachkommastellen verwendet. Da der Punkt jedoch auch für die String-Verkettung benutzt wird muss man hier ein wenig aufpassen, wenn man Float-Zahlen mit Strings verketten will. Notfalls ist es nötig Klammern zu verwenden.

<?php
echo 'Prozentualer Anteil:'.77.3.'%'// wird nicht klappen
echo 'Prozentualer Anteil:'.(77.3).'%'// klappt
echo 'Prozentualer Anteil:'77.3 .'%'// klappt, die Leerzeichen "helfen" hier php beim parsen
?>

4. Speicherverwaltung von Integer- und Float-Zahlen

Nun fragt man sich warum es Integer- und Float-Zahlen gibt wo doch Float-Zahlen mehr können. Die Verwendung und die Logik in der Speicherung beider Datentypen ist jedoch eine andere. Integer-Zahlen werden z.B. relativ einfach abgespeichert. Nehmen wir an eine Integer-Zahl soll in ein 64 Bit Feld gespeichert werden. Davon geht dann schonmal 1 Bit für das Vorzeichen drauf (mehr oder weniger, hat was mit Zweierkomplement zu tun). Die restlichen 63 Bits stehen dann für eine bestimmte Wertigkeit. Wenn an den Bits eine 1 steht so besitzt diese Integer-Zahl diese Wertigkeit. Die Summe aller Wertigkeiten die gesetzt sind bilden dann den Betrag der Zahl und mit dem Vorzeichenbit wird dann die komplette Zahl dargestellt. Die Wertigkeit startet dabei von 2^0 (1) und geht bis 2^62 (4611686018427387904). Die Zahl 50 wird z.B. in die Wertigkeiten 32, 16 und 2 aufgeteilt (wie man sieht sind das Zweierpotenzen). Auf Bits runtergerechnet sind das die Bits 1 (2^1 = 2), 4 (2^4 = 16) und 5 (2^5 = 32). Diese werden dann in dem 64 Bit Feld gesetzt.

Gesetzen Bits der Integerzahl 50 (vereinfacht) Abb.:Gesetzen Bits der Integerzahl 50 (vereinfacht)

Integer-Zahlen werden jedoch üblicherweise Trickreicher im sog. Zweierkomplement abgespeichert.

Bei den Float-Zahlen geht man einen anderen Weg. Da sie auch Nachkommastellen speichern können können wir solche Wertigkeiten erstmal nicht benutzen. Float-Zahlen werden in den IEEE 754 Standard gespeichert. Z.b. werden von den 32 Bits 1 Bit fürs Vorzeichen verwendet, 8 Bits für den Exponent und 23 Bits für die Mantisse. Zuerst wird mit der Mantisse eine Nachkommazahl dargestellt, die mehr oder weniger zwischen 0 und 1 liegt. Dann wird zu dieser Zahl eine 2er Potenz draufmultipliziert. Der Exponent wird dabei aus den 8 Bits gebildet. Je nach verwendeten Standard wird diese Mantisse, die zwischen 0 und 1 liegt, nach links (wenn der Faktor sehr groß ist, z.B. 2^50) oder nach rechts (wenn der Faktor sehr klein ist, z.B. 2^-50) verschoben. Mit dem Vorzeichenbit endsteht dann eine komplette Zahl. Letzendlich kann man also nicht jede beliebige Kommazahl darstellen sondern nur einen bestimmten Bereich der Kommazahl, da man nur einen 6-7 Ziffern großen Nachkommawert hin und her verschiebt. Für die meisten Sachen reicht diese Idee, in der Mathematik macht man es ja auch nicht anders (der LKW wiegt 31,6 Tonnen statt 31,6453903197 Tonnen).

Fragen zum Kapitel

1. Welche beiden Zahlentypen gibt es?

Es gibt Integer-Zahlen für ganzzahlige Werte und Float-Zahlen für Werte mit Nachkommastellen.

Zurück zu Weiter zu
Copyright © bei den OPs von #php.de/QuakeNet Valid XHTML 1.0 Strict Valid CSS!