int auf 64 Bit
-
out schrieb:
Ne, auch 4 Byte:
Wo liest du eine garantierte Größe von 4 aus der Tabelle? Du kannst höchstens sagen: In den üblichen Implementierungen hat int 32 Bit (und es ist nicht gesagt, dass ein char unbedingt 8 Bit hat). Jeder weiß wohl, dass das beispielsweise früher nicht so war und es gibt da draußen auch wirklich Systeme, auf denen alle Größen gänzlich anders sind*.
*: Und besagte Systeme sind trotzdem 100% standardkonform, eben weil dort nur Mindestgrößen angegeben werden.
-
-
eh danke euch aber ... ist das jetzt die antwort auf meine frage?
-
Die Antwort auf Deine Frage lautet:
Die Größen von sowohl a) als auch b) hängen nicht nur von der Architektur sondern auch vom verwendeten Compiler (und u.U. dessen Version) ab.
-
Die Antwort auf Deine Frage lautet:
Die Größen von sowohl a) als auch b) hängen nicht nur von der Architektur sondern auch vom verwendeten Compiler (und u.U. dessen Version) ab.danke - sehe ich das richtig dass meine obige bemerkung richtig wäre wenn
ich für a) einen 32 Bit compiler auf einer 32 Bit architektur nutze (die 4 Byte für int alloziiert) und für b) eben einen 64 BIt compiler auf 64 Bit architektur (die 8 byte pro int alloziiert) ?
-
Der Standard sagt:
N3337 §3.9.1 / 2:
Plain ints have the natural size suggested by the
architecture of the execution environment. [Footnote:] [T]hat is, large enough to contain any value in the range of INT_MIN and INT_MAX, as defined in the header <climits>.**
<climits>in §18.3.3 / 2:**The contents are the same as the Standard C library header <limits.h>.Und was sagt der C99-Standard?
N1256 §5.2.4.2.1:
Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
CHAR_BIT 8
Ein char hat also mindestens 8 Bit.
INT_MIN -32767 // -(2^15 - 1)
INT_MAX +32767 // 2^15 - 1Und ein int mindestens 16.
-
Sone schrieb:
INT_MIN -32767 // -(2^15 - 1)
INT_MAX +32767 // 2^15 - 1Und ein int mindestens 16.
Wie kommst du jetzt auf 16? Und was ist die Quelle für dein Zitat? Ich glaube, du hast das mit dem Vorzeichen falsch verstanden. §5.2.4.2.1 ist nicht so
int >= [-char;+char], sondern so zu vertsehen:(signed) int >= (signed) char, unsigned int >= unsigned char, usw.
-
fragender2 schrieb:
Die Antwort auf Deine Frage lautet:
Die Größen von sowohl a) als auch b) hängen nicht nur von der Architektur sondern auch vom verwendeten Compiler (und u.U. dessen Version) ab.danke - sehe ich das richtig dass meine obige bemerkung richtig wäre wenn
ich für a) einen 32 Bit compiler auf einer 32 Bit architektur nutze (die 4 Byte für int alloziiert) und für b) eben einen 64 BIt compiler auf 64 Bit architektur (die 8 byte pro int alloziiert) ?Nein
-
fragender2 schrieb:
danke - sehe ich das richtig dass meine obige bemerkung richtig wäre wenn
ich für a) einen 32 Bit compiler auf einer 32 Bit architektur nutze (die 4 Byte für int alloziiert) und für b) eben einen 64 BIt compiler auf 64 Bit architektur (die 8 byte pro int alloziiert) ?Nö. Unter Windows 7 64-Bit auf x86-64 mit einem 64-Bit-Compiler besteht ein int sowie ein long immer noch aus 32 Bits. Unter Linux (auch 64 Bit) auf derselben Kiste hätte ein int 32 Bit und ein long 64 Bit. Beides ist standardkonform.
ints bestehen aus mindestens 16 Bits
longs bestehen aus mindestens 32 Bits.
long longs bestehen aus mindestens 64 Bits.Wenn es da nicht drauf ankommt, verwende int. Uns sonst haben wir ja noch diverse Typedefs aus <cstdint>, wie z.b. int_fast32_t oder int64_t, wenn du so etwas brauchst. Boost hat auch noch einen Header, der dir dafür Templates anbietet, dass du dir auch einen Typ mit mindestens 25 Bits holen kannst, oder so etwas.
Hinweiser schrieb:
Sone schrieb:
INT_MIN -32767 // -(2^15 - 1)
INT_MAX +32767 // 2^15 - 1Und ein int mindestens 16.
Wie kommst du jetzt auf 16?
Hast du das Wort "mindestens" übersehen?!
Hinweiser schrieb:
Ich glaube, du hast das mit dem Vorzeichen falsch verstanden. §5.2.4.2.1 ist nicht so
int >= [-char;+char], sondern so zu vertsehen:(signed) int >= (signed) char, unsigned int >= unsigned char, usw.Das kann ich leider nicht deuten.
-
Hinweiser schrieb:
Sone schrieb:
INT_MIN -32767 // -(2^15 - 1)
INT_MAX +32767 // 2^15 - 1Und ein int mindestens 16.
Wie kommst du jetzt auf 16? Und was ist die Quelle für dein Zitat? Ich glaube, du hast das mit dem Vorzeichen falsch verstanden. §5.2.4.2.1 ist nicht so
int >= [-char;+char], sondern so zu vertsehen:(signed) int >= (signed) char, unsigned int >= unsigned char, usw.Quelle ist doch genannt, N1256...
Wie ich auf 16 komme? Na, da steht doch ganz klar, dass die Beträge der von der Implementation definierten Makros mindestens so groß sein müssen wie die genannten.
Also muss ein Variable vom Typintmindestens jede Ganzzahl im Intervall [-(2^{15} - 1) ~,~ 2^{15} - 1] darstellen können - also mindestens 16 Bit groß sein...