Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » int, long, long int?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
14.09.2003, 23:24 Uhr
Pablo
Supertux
(Operator)


Wieso bekommen ich -2147483648 wenn ich folgendes tue:


C++:
long x;
x = (long) pow(2,31);
printf("%d\n", x);



Ist etwa der Werte Bereich von long [-2^31, 2^(31) - 1] ?

Wie kann 2^31 bekommen, ohne double oder float zu benutzen? Oder muss ich das benutzen? was ist denn long int?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.09.2003, 08:09 Uhr
virtual
Sexiest Bit alive
(Operator)


1. Der Cast nach long ist überflüssig.
2. Der Wertebereich von long ist nicht festgelegt, er richtet sich nach der Größe des Long auf der jeweiligen Platform. Es gilt dabei

C++:
1==sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)


Ein sizeof(long)==1 ist damit durchaus im Rahmen der Möglichkeiten.
3. Nimmt man mal an, das long habe 32 Bits. Dann ist bei vielen Architekturen der oberste Bit das Vorzeichenbit, gefolgt von 31 "Wertebits". Damit lassen sich Zahlen im Intervall [-2^31, 2^31[ Darstellen. Folglich ist pow(2,31) ausserhalb des Werteberechs des longs.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 15.09.2003 um 08:15 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.09.2003, 10:28 Uhr
0xdeadbeef
Gott
(Operator)


Lösungsvorschlag: Nimm unsigned long:

C++:
unsigned long x;
x = pow(2, 31);
printf("%ld\n", x);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.09.2003, 11:24 Uhr
Pablo
Supertux
(Operator)


@virtual: ja, das long-Casting ist überflüssig. In meinen Testprogrammen benutze ichd as nicht, aber komischerweiser hat immer 0 ausgegeben, und als ich mit (long) gecastet hab, geht wieder.

@beefy: ich kann unsigned long nicht nehmen. 2. Komple. Darstellung, da brauche das 31. Bit für das Vorzeichen. Und mit unsigned long hab ich schon versucht und kommt sowieso negative Zahl raus.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.09.2003, 11:34 Uhr
0xdeadbeef
Gott
(Operator)


Ein unsigned long kann keine negative Zahl halten. Aber wenn du ein Vorzeichen brauchst, bringt dich das nicht weiter. Hast du ein Problem mit C99? Wenn nicht, nimm long long.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.09.2003, 13:06 Uhr
Pablo
Supertux
(Operator)


Daran habe ich nicht gedacht. Aber long long? Das hab ich noch nie gesehen, aber ich werde es versuchen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.09.2003, 15:15 Uhr
proga



hat nichts mit deiner x-Variable zu tun, pow(2, 31) gibt nun mal -2147483648 zurück, ist Tatsache
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.09.2003, 15:18 Uhr
0xdeadbeef
Gott
(Operator)


Bei mir (Debian Sid, gcc 3.3.2-pre) gibt pow(2,31) genau 2147483648 zurück, wie dieses Programm eindrucksvoll zeigt:

C++:
#include <math.h>
main(){printf("%lf\n", pow(2, 31));


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.09.2003, 15:31 Uhr
proga




Zitat:
0xdeadbeef postete
Bei mir (Debian Sid, gcc 3.3.2-pre) gibt pow(2,31) genau 2147483648 zurück, wie dieses Programm eindrucksvoll zeigt:

C++:
#include <math.h>
main(){printf("%lf\n", pow(2, 31));


Ich bekomme bei diesem Code folgendes zurück:
pow returned -2147483648.0000000 double
ps: Windows 2000, VS .NET 2003

Dieser Post wurde am 15.09.2003 um 15:32 Uhr von proga editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
15.09.2003, 15:52 Uhr
0xdeadbeef
Gott
(Operator)


Wieviel ist sizeof(double) unter Win2000?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: