unsigned short wächst über sich hinaus
-
Warum geht das hier:
#include <iostream> int main() { unsigned short a=536*122; std::cout << a << "\n"; //AUSGABE: 65392 return 0; }536*122 ergibt 65392. Aber ein "unsigned short" hat doch eine maximale Größe von 65335. Warum geht das dann aber trotzdem?
MfG
Stromberg
-
Stromberg schrieb:
Aber ein "unsigned short" hat doch eine maximale Größe von 65335.
0xffff = 65535...
Der Standard schreibt übrigens ein Minimum von 0xffff für's Maximum vor. Von einem Maximum für's USHORT_MAX ist nirgends die Rede..
greetz, Swordfish
-
65536 = 2^16..
-
//edit müll
-
drakon schrieb:
65536 = 2^16..
welch wunder...
-
Jo, für manche scheint es noch ein zu sein:
maximale Größe von 65335

-
drakon schrieb:
65536 = 2^16..
Sehr intelligent...
Du vergisst dabei das die 0 auch noch eine Zahl ist und in C++ dem positiven Zahlenraum zugerechnet wird. Dadurch ergibt sich dann aus den 65536 Zahlen der Zahlenraum 0 - 65535.
Ob USHORT jetzt eine wirklich feste maximale Größe hat ist mir aber nicht sicher bekannt, ich bin einfach bis jetzt davon ausgegangen...MfG
slice
-
Egal, wo die 0 ist, 2^16 = 65536 stimmt... (oder ist 2^16 mal nur 32768 (bzw. 32767), nur weil die variable signed ist?)
btw hatte drakon schon die bahnbrechende erkenntnis, dass der WB mind. die Werte (von 0) bis 65535 umfasst und wenn du noch ein stück weiter hoch guckst, siehst du auch, was 'Swordfish' geschrieben hat (das supremum der maxima ist ggn und kein absoulutes max)...--> erst lesen, dann nachdenken(, dann noch mal lesen) und dann schreiben...
bb
-
slice89 schrieb:
drakon schrieb:
65536 = 2^16..
Sehr intelligent...
Du vergisst dabei das die 0 auch noch eine Zahl ist und in C++ dem positiven Zahlenraum zugerechnet wird. Dadurch ergibt sich dann aus den 65536 Zahlen der Zahlenraum 0 - 65535.
Ob USHORT jetzt eine wirklich feste maximale Größe hat ist mir aber nicht sicher bekannt, ich bin einfach bis jetzt davon ausgegangen...MfG
sliceHast du irgendein Problem? Da steht lediglich, dass 2^16 65536 mögliche Zustände hat.
-
Vielleicht ist das noch überraschender für dich:
#include <iostream> int main() { unsigned short a = 65535; std::cout << (a + 30) << "\n"; }
-
Ach, ist das schön...

greetz, Swordfish