Frage zum Suffix von Zahlen
-
mmhh. ok,
ich verstehe noch nicht allzuviel davon.
wer das Buch zufälling kennt, weiß, auf welcher seite ich gerade bin.
Danke
-
Suffixe braucht man auch, wenn man eine Zahl als Hexadezimalwert schreibt. Ich würde aber auch behaupten, dass man Suffixe je nach Aufgabenbereich eher selten benötigt. Aber wissen wie sie funktionieren sollte man trotzdem.
-
TNA schrieb:
Suffixe braucht man auch, wenn man eine Zahl als Hexadezimalwert schreibt. Ich würde aber auch behaupten, dass man Suffixe je nach Aufgabenbereich eher selten benötigt. Aber wissen wie sie funktionieren sollte man trotzdem.
Du meinst die Präfixe "0x", "0X" und "0" (für oktal). Hexadezimal und Oktalzahlen dürfen selber natürlich auch nochmal unterschiedliche Typen haben. Hexadezimal darf in C99 sogar einen floating point Typen haben! In C++11 funktioniert es beim GCC anscheinend auch, selbst im pedantischen Modus:
https://ideone.com/kc7lUpKonnte aber leider keine entsprechende Stelle im Standard finden.
-
SeppJ schrieb:
Konnte aber leider keine entsprechende Stelle im Standard finden.
Siehe dir die Grammatik auf §2.14.4 an.
-
Sone schrieb:
SeppJ schrieb:
Konnte aber leider keine entsprechende Stelle im Standard finden.
Siehe dir die Grammatik auf §2.14.4 an.
hatte mich schon gefragt, wie lange das jetzt wohl dauert
-
SeppJ schrieb:
Hexadezimal darf in C99 sogar einen floating point Typen haben! In C++11 funktioniert es beim GCC anscheinend auch, selbst im pedantischen Modus:
https://ideone.com/kc7lUpKonnte aber leider keine entsprechende Stelle im Standard finden.
Das habe ich auch noch nie gesehen...
Ist eine Erweiterung: http://gcc.gnu.org/onlinedocs/gcc/Hex-Floats.html
-
Sone schrieb:
SeppJ schrieb:
Konnte aber leider keine entsprechende Stelle im Standard finden.
Siehe dir die Grammatik auf §2.14.4 an.
Eben da habe ich doch geguckt! Da finde ich aber nichts davon. Ist mein Draft (N3337) zu alt?
-
SeppJ schrieb:
Sone schrieb:
SeppJ schrieb:
Konnte aber leider keine entsprechende Stelle im Standard finden.
Siehe dir die Grammatik auf §2.14.4 an.
Eben da habe ich doch geguckt! Da finde ich aber nichts davon.
Was findest du nicht? Die Grammatik ist eindeutig: Entweder, der Beginn eines floating literals ist eine Reihe von Ziffern oder ein Punkt. Nach der Ziffernreihe kommt als nächstes "nicht-Ziffer"-Zeichen entweder ein Punkt oder e/E. Was kann man da nicht finden?
-
Sone schrieb:
SeppJ schrieb:
Sone schrieb:
SeppJ schrieb:
Konnte aber leider keine entsprechende Stelle im Standard finden.
Siehe dir die Grammatik auf §2.14.4 an.
Eben da habe ich doch geguckt! Da finde ich aber nichts davon.
Was findest du nicht? Die Grammatik ist eindeutig: Entweder, der Beginn eines floating literals ist eine Reihe von Ziffern oder ein Punkt. Nach der Ziffernreihe kommt als nächstes "nicht-Ziffer"-Zeichen entweder ein Punkt oder e/E. Was kann man da nicht finden?
Hast du meine Frage überhaupt gelesen?
SeppJ schrieb:
Hexadezimal darf in C99 sogar einen floating point Typen haben! In C++11 funktioniert es beim GCC anscheinend auch, selbst im pedantischen Modus:
https://ideone.com/kc7lUpKonnte aber leider keine entsprechende Stelle im Standard finden.
Was dann wohl offensichtlich nicht vom Standard gedeckt ist, weil eine entsprechende Klausel fehlt, sofern es eben nicht noch irgendwo einen versteckten Absatz gibt, dass C99-Literale auch erlaubt sind. Entsprechend ist das Literal im Link nicht C++-portabel. In C99 ist dies aber ausdrücklich durch den Standard gedeckt!
-
for(auto i = 0u; i != n; ++i)
-
SeppJ schrieb:
Was dann wohl offensichtlich nicht vom Standard gedeckt ist, weil eine entsprechende Klausel fehlt
Wie soll das möglich sein? Das wäre ein Verstoß gegen die Grammatik, die schließlich dezidiert und eindeutig die Syntax beschreibt - nicht die Klauseln. Es ist nicht nötig, auf Features die in anderen Standards erklärt sind zu verweisen, da hätte man sich viel sparen können.
Aber gut, wenn du meinst - du bist der Boss...
-
bei Integer Literalen beachte auch
C.2 C++ and ISO C++ 2003
2.14.2
Change: Type of integer literals
Rationale: C99 compatibility.
Effect on original feature: Certain integer literals larger than can be represented by long could change from an unsigned integer type to signed long long.bei einem Compiler mit 32-Bit long int ist das Literal 2147483648l nach C++2003 ein unsigned long int und nach C++11 ein long long int.
-
Also ich verstehe das so:
Certain integer literals larger than can be represented by long could change from an unsigned integer type to signed long long.
-
das "could change" bezieht sich darauf, daß es davon abhängt, wie groß ein long int ist
bei einem Compiler mit 64-Bit long int ist das Literal 2147483648l nach C++2003 und nach C++11 ein long int (keine Änderung).
-
Sone schrieb:
SeppJ schrieb:
Was dann wohl offensichtlich nicht vom Standard gedeckt ist, weil eine entsprechende Klausel fehlt
Wie soll das möglich sein? Das wäre ein Verstoß gegen die Grammatik, die schließlich dezidiert und eindeutig die Syntax beschreibt - nicht die Klauseln. Es ist nicht nötig, auf Features die in anderen Standards erklärt sind zu verweisen, da hätte man sich viel sparen können.
Bei der Standardbibliothek wird auf den C-Standard verwiesen, selbst wenn dadurch indirekt Sachen wie die Mindestgrößen der Datentypen festgelegt wird, die eigentlich Kernbestandteil der Sprache sind. Die stehen nämlich ansonsten an keiner Stelle direkt im C++-Standard, obwohl es sie gibt.