Numeralia in C++
Einführende Beispiele
Auch eine Folge von Ziffern ist ein Ausdruck. Der Wert solch eines Ausdrucks repräsentiert eine Zahl. Wir bezeichnen einen Wert, der eine bestimmte Zahl repräsentiert, meist einfach als eine Zahl.
Das folgende Programm gibt beispielsweise eine Textdarstellung der Zahl «32767» aus.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 32767 << "\n"s; }
::std::cout
32767
Das folgende Programm gibt eine Textdarstellung der Zahl 0 (Null) aus.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 0 << "\n"s; }
::std::cout
0
Das folgende Programm gibt eine Textdarstellung der Zahl «12» (Zwölf) aus.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 12 << "\n"s; }
::std::cout
12
Die Ausgabe des folgenden Programms läßt sich nicht von der Ausgabe des vorigen Programms unterscheiden, obwohl der Wert des Ausdrucks diesmal eine Zeichenfolge ist.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << "12"s << "\n"s; }
::std::cout
12
Numeralia
Ein Numerale (also ein Zahlwort, Plural: „Numeralia“) ist eine Schreibweise einer bestimmten Zahl (vor allem im Quelltext).
- Numerale
32767
- Bedeutung des Numerales (Zahl)
32767
Das Numerale »32767« ist ein Teil des Quelltextes, es besteht aus konkreten Schriftzeichen. Die Zahl 32767 ist ein Gegenstand der Anschauung, sie existiert nur in unserer Vorstellung.
Einleitenden Nullen »0«
Numeralia außer »0« sollten nicht mit »0« beginnen. Die Zahl «12» sollte also beispielsweise als »12« und nicht als »012« geschrieben werden! (Ein Numerale wie »012« hat in C++ eine besondere Bedeutung, die aber nur selten benötigt wird und deswegen hier noch nicht weiter behandelt wird.)
Apostrophe in Numeralia
Das Zeichen »'« wird in der DIN 66003 Apostroph genannt. Diese Bezeichnung wird hier übernommen.
Zur optischen Gliederung können auch Apostrophe »'« in Numeralia zwischen zwei Dezimalziffern eingefügt werden. Es dürfen aber nicht zwei Apostrophe direkt aufeinander folgen. Eine Million kann damit beispielsweise als »1'000'000« geschrieben werden.
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 32'767 << "\n"s; }
::std::cout
32767
Aufbau
Eine Dezimalziffer ist eines der zehn Schriftzeichen »0«, »1«, »2«, »3«, »4«, »5«, »6«, »7«, »8«, und »9«.
Ein Numerale ist eine Folge von Dezimalziffern. Sie darf, außer beim Numerale »0« nicht mit der Ziffer »0« beginnen. Zwischen zwei benachbarten Ziffern darf ein Apostroph eingefügt sein. Beispiele: »0«, »1«, »2«, »10«, »11«, »100«, »101«, »1000«, »1'000«, »1'0'0'0«.
Das folgende Aufbaudiagramm stellt diese Regeln bildlich dar.
- Aufbaudiagramm
Jede Dezimalziffer ausser 0
.-.
|-|---.--->( 1 )---.--->|-|
| '-' ^
| .-. |
'--->( 2 )---'
| '-' ^
| .-. |
'--->( 3 )---'
| '-' ^
| .-. |
'--->( 4 )---'
| '-' ^
| .-. |
'--->( 5 )---'
| '-' ^
| .-. |
'--->( 6 )---'
| '-' ^
| .-. |
'--->( 7 )---'
| '-' ^
| .-. |
'--->( 8 )---'
| '-' ^
| .-. |
'--->( 9 )---'
'-'Dezimalziffer
.-.
|-|---.-------->( 0 )----------.--->|-|
| '-' |
| .---------------. |
| | Jede | |
'--->| Dezimalziffer |---'
| ausser 0 |
'---------------'Dezimalnumerale .-.
.---( ' )---.
| '-' |
V |
.---'<----------'---.
| |
| |
V .-. |
.--------------->'------>( 0 )-------'------------------------------------------.
| '-' |
| .---------------. |
| | Jede | v
|-|---'--->| Dezimalziffer |---.--------------------------------------------------.-->'--->|-|
| ausser 0 | ^ |
'---------------' | |
| .---------------. |
'-----| Dezimalziffer |---.<-------------------.---'
'---------------' ^ |
| .-. |
'--------( ' )-------'
'-'
Werte
Bisher haben wir Zahl und Zeichenfolgen als Werte kennengelernt.
- Werte
Wert
^
|
.----------'----------.
| |Zahl Zeichenfolge
Der Begriff „Wert“ kommt ursprünglich von den Zahlen. Zahlen werden ja auch „Zahlenwerte“ oder „Werte“ genannt. Da ein Computer aber nicht nur mit Zahlen umgeht, sondern auch mit Zeichenfolgen, wurde der Begriff „Wert“ dann von den Zahlen ausgehend so verallgemeinert, daß er auch Zeichenfolgen umfaßt.
Werte sind kein Quelltext, sondern existieren nur bei der Ausführung eines Programms im Inneren einer C++ -Implementation (oder in unserer Vorstellung).
Ein Wert ist eine interne Repräsentation einer Zahl oder eine Zeichenfolge, die bei der Ausführung eines Programms gebildet wird. Beispielsweise steht der Wert »2« (also der Wert des Ausdrucks »2«) für die ganze Zahl Zwei.
Literale
Ein Literal ist ein Numerale oder ein Zeichenfolgenliteral.
- Literal
Literal
^
|
.----------'----------.
| |Numerale Zeichenfolgenliteral
Ein Literal steht im Quelltext für einen bestimmten Wert.
Der Wert eines Numerales ist die Zahl, für welche das Numerale steht, und der Wert eines Zeichenfolgenliterals ist die in ihm zwischen den Anführungszeichen enthaltene Zeichenfolge.
Wenn ein Teil eines Programmes für einen bestimmten Wert steht, so sagt man auch, daß er diesen Wert habe oder angebe oder notiere oder darstelle.
Ein Wert kann nicht direkt in ein Programm hineingeschrieben werden. In ein Programm kann nur ein Literal geschrieben werden. Der Wert wird dann bei der Ausführung des Programms aus diesem Literal gebildet.
Ein Literal ist nicht der Wert selber, sondern eine Schreibweise für einen Wert.
Wenn man die Semantik eines Literals erklärt, so erklärt man, wie man seinen Wert ermitteln kann.
Abgrenzung der Werte zu den Zahlen * Während es die Zahl Zwei nur einmal gibt, kann der Wert «2» mehrfach im Speicher eines Computers vorkommen.
Abgrenzung der Werte zu den Literalen * Verschiedene Literale, wie »22« und »2'2« können für denselben Wert stehen. Während die Ausdrücke im Quelltext vorkommen, existieren die Werte während der Ausführung eines Programmes im Speicher des Computers.
Ermittlung der Bedeutung eines Numerales
Den von einem Numerale ausgedrückten Zahlenwert erhält man, indem man zunächst alle Apostrophe entfernt und dann den auch aus dem Alltag für Numeralia geläufigen Wert abliest. Beispielsweise steht das Numerale »10« für den Wert «10».
Eine abkürzende Schreibweise
In diesem Kurs schreiben wir oft etwas wie „der Wert «65»“ und meinen damit den Wert, der ausführlich und korrekt als „der Wert des Ausdrucks »65«“ bezeichnet werden müßte.
Übungsfragen
? Ausgabe vorhersagen
Was gibt das folgende Programm aus?
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << 7 << "\n"s; }
? Gleichheit von Werten
Ist der Wert des Numerales »32767« gleich dem Wert des Numerales »32'767«?
? Gleichheit von Numeralia
Ist das Numerale »32767« gleich dem Numerale »32'767«?
? Programm lesen *
Warum gibt das folgende Programm keine Darstellung des Wertes «0» aus?
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << O << "\n"s; }
? Programm lesen *
Warum gibt das folgende Programm keine Darstellung des Wertes «1» aus?
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main() { ::std::cout << l << "\n"s; }