Erledigt DANKE SEHR Wertebereichsüberschreitung Integer Unsigned Double?
-
#include <iostream> using namespace std; int main() { int i; unsigned u; double d; i=2147483647+1; u=2147483647+1; d=2147483647+1; cout<<"integer Ausdruck = "<<i<<endl; cout<<"Integer Overflow, Wertebereich wird ueberschritten,Umkehrung des Vorzeichens"<<endl; cout<<"Erstes Bit wird auf 1 gesetzt"<<endl; cout<<endl; cout<<"unsigned Ausdruck= "<<u<<endl; cout<<"Wertebereich wird nicht ueberschritten dadurch Ergebnis korrekt"<<endl; cout<<endl; cout<<"double Ausdruck = "<<d<<endl; cout<<"??????????????????????"<<endl;
-
markuswenczel schrieb:
bitte um Hinweis warum das so ist
- Bitte den kompletten Code, mit dem du die Ausgabe bekommst.
- Nachdem ich es schon mehrfach für dich gemacht hab und du mehrfach drauf hingewiesen wurdest ein letztes Mal die Bitte, cpp-Tags zu benutzen. Findest du unter den Smileys beim "Antwort schreiben"-Dialog.
- Bitte lies dir den Link in meiner Signatur gründlich durch!
Kann doch eigentlich nicht so schwer sein...
-
i= -2147483648 klar
u= 2147483648 klar
d= -2147483648 ????
-
markuswenczel schrieb:
i= -2147483648 klar
u= 2147483648 klar
d= -2147483648 ????Auf der rechten Seite deiner Zuweisung steht ein Integer. Für den gelten dann auch die Integerrechenregeln. Der Ausdruck kann ja nicht magisch wissen, dass er später einmal einem double zugewiesen wird.
-
Zeile 10: 2147483647+1 ist die Addition von zwei Integer-Literalen, ergibt wieder ein int, und zwar mit Überlauf und Wert -2147483648. Das weist du einem int zu.
Zeile 11: das selbe, nur dass du diesmal den int-Wert -2147483648 einem unsigned int zuweist - dadurch wird der Wertebereich wieder "gradegebogen".
Zeile 12: das selbe, nur dass du diesmal den int-Wert -2147483648 einem double zuweist. Das wird auch so ausgegeben.Der Überlauf findet also schon bei der Addition der beiden Literale statt, die Typumwandlung kommt erst danach.
-
pumuckl schrieb:
Zeile 10: 2147483647+1 ist die Addition von zwei Integer-Literalen, ergibt wieder ein int, und zwar mit Überlauf und Wert -2147483648. Das weist du einem int zu.
Zeile 11: das selbe, nur dass du diesmal den int-Wert -2147483648 einem unsigned int zuweist - dadurch wird der Wertebereich wieder "gradegebogen".
Zeile 12: das selbe, nur dass du diesmal den int-Wert -2147483648 einem double zuweist. Das wird auch so ausgegeben.Der Überlauf findet also schon bei der Addition der beiden Literale statt, die Typumwandlung kommt erst danach.
SUPER ERKLÄRUNG DANKE SEHR VIEL MALS WERDE MICH BEMÜHEN IN ZUKUNFT BESSER ZU POSTEN LG
MARKUS