Maximaler Integerwert?
-
Hallo,
wie kann ich auf einem beliebigen System den maximalen Integerwert herausfinden?
Gibt es da etwas analog zu Javas Integer.MAX_VALUE.
Oder sollte ich es mir über sizeof(int) dann selber errechnen? (Falls ich herausbekomme, wie es genau funktioniert).Danke, Mat.
-
INT_MAX. Aber limits.h einbinden.
-
ich hätte eine unsinnige aber (meines wissens) funktionierende idee:
wenn man von einem integer=-1 solange 1 abzieht, bis die zahl wieder größer als 0 ist, und diese ausgibt erhält man den maximalen integerwert, da nach überschreiten der minimumgrenze wieder von "oben" begonnen wird... (bei mir hats geklappt!)mfG (c)h
-
[quote="chille07"]ich hätte eine unsinnige aber (meines wissens) funktionierende idee:
wenn man von einem integer=-1 solange 1 abzieht, bis die zahl wieder größer als 0 ist, und diese ausgibt erhält man den maximalen integerwert, da nach überschreiten der minimumgrenze wieder von "oben" begonnen wird... (bei mir hats geklappt!)mfG (c)h[/quote]
Stimmt, die Idee ist unsinnig *g*
Einfacher (?) geht es wirklich, wenn man sich mit sizeof(int) die Anzahl der Bytes zurück geben lässt, die Integer (ja, ist verschieden auf manchen Systemen) im Speicher belegt.
Damit kann man dann MAX_INT bzw MIN_INT ausrechnen.Die Idee mit limits.h ist natürlich das, was ich gesucht hab
Danke dafür.
-
Matrim schrieb:
Einfacher (?) geht es wirklich, wenn man sich mit sizeof(int) die Anzahl der Bytes zurück geben lässt, die Integer (ja, ist verschieden auf manchen Systemen) im Speicher belegt.
Damit kann man dann MAX_INT bzw MIN_INT ausrechnen.Nur, wenn du weisst, wieviel Bits in einem Byte sind... CHAR_BIT aus limits.h ist da dein Freund
Fazit: ohne limits.h ist es nicht möglich (ausser die unsinnige Methode: berechnen)
-
Nun bin ich verwirrst, sind nicht immer 8 Bits in einem Byte?
-
Darstellbar sind im positiven Bereich die natürlichen Zahlen
bis (2 hoch (32-1) – 1); entspricht: (2 hoch (Anzahl Bits – 1) –1) = 2.147.483.647*glaube ich*
-
Matrim schrieb:
Nun bin ich verwirrst, sind nicht immer 8 Bits in einem Byte?
Nein.
-
groovemaster schrieb:
Matrim schrieb:
Nun bin ich verwirrst, sind nicht immer 8 Bits in einem Byte?
Nein.
Wäää? Das möchte ich aber genauer beschrieben haben!
Per Definition ist doch ein Byte 8 Bit groß/lang.Wenn nun einer kommt und sagt 1Kg sind nicht immer 1000g, dann bräuchten wir auch kein Kg. Also wäre ein Byte auch Sinnlos, wenns es nicht 8 Bits hätte!
-
freshman schrieb:
Darstellbar sind im positiven Bereich die natürlichen Zahlen
bis (2 hoch (32-1) – 1); entspricht: (2 hoch (Anzahl Bits – 1) –1) = 2.147.483.647*glaube ich*
Ja, glaubst du vielleicht. Ist aber trotzdem falsch.
@Airdamn:
ein Byte ist die kleinste adressierbare Einheit. Sie hat idR 8 Bit, aber nicht zwingenderweise.
siehe auch: http://medic.bgu.ac.il/comp/course/defs/byte.html
-
hmm ich glaube 1byte ist schon immer 8bit.
darauf hat man sich jetzt geeinigt. was früher mal war mit 6 oder so, das war früher so. nenn mir mal firmen, welche nicht 1zu8 nehmen. bei den heutigen rechner 32 und 64 bit rechner ist es halt "dumm" 7 zu nehmen. oder ist 7 neuerdings ein teiler von 32/64. oder ist 6 ein teiler? ne man hat sich jetzt auf 8 geeinigt.siehe auch http://de.wikipedia.org/wiki/Byte
normalerweise gebe ich wikipedia nie zu 100% recht. aber in diesem falle kann ich statt 99 auch 100% recht geben
nette neue smilies
:xmas1: :xmas2: :xmas1:hehe nehmt sie, solange sie noch da sind
:xmas1: :xmas2: :xmas2: :xmas1:
-
newkid schrieb:
hmm ich glaube 1byte ist schon immer 8bit.
Nein.
wikipedia sagt auch klar, 8Bit sind ein OktettMal abgesehen davon, dass es in C ja genaugenommen keine Bytes sind, sondern chars.
Wozu hätte man denn die Konstante CHAR_BIT wenn sie doch sowieso immer 8 wäre...?
-
freshman schrieb:
Darstellbar sind im positiven Bereich die natürlichen Zahlen
bis (2 hoch (32-1) – 1); entspricht: (2 hoch (Anzahl Bits – 1) –1) = 2.147.483.647@Shade Of Mine: was stimmt denn daran nicht?
-
hmmm
@Shade Of Mine
also kannst du mir maybe 8/16/32/64/128 bit rechner nennen, wo nicht 1zu8 ist?
wenn er nen rechner hat mit 14 kann das wohl was anderes sein. aber nenn mir mal konkret rechner wo das nicht so sein solltewenn
Mal abgesehen davon, dass es in C ja genaugenommen keine Bytes sind, sondern chars.
dann erübrigt sich die frage und das Problem ja gleich
:xmas1: :xmas2: :xmas2: :xmas1:
:xmas1: :xmas1: :xmas2: :xmas1: :xmas1:
-
freshman schrieb:
@Shade Of Mine: was stimmt denn daran nicht?
Dass ein int nicht zwangsläufig 32Bit hat.
newkid schrieb:
also kannst du mir maybe 8/16/32/64/128 bit rechner nennen, wo nicht 1zu8 ist?
wenn er nen rechner hat mit 14 kann das wohl was anderes sein. aber nenn mir mal konkret rechner wo das nicht so sein sollte*lol*
natürlich haben 8/16/32/64/128 bit rechner 8bits per Byte.
Sonst wäre es ja _sehr_ komisch.google hilft hier aber: http://minnie.tuhs.org/pipermail/tuhs/2004-September/001070.html
Natürlich ist 1 Byte == 8 Bit das gängigste. Aber es gibt eben Systeme (wenn auch verdammt wenige) in denen 1 Byte zB 9 Bit oder 10 Bit hat.
-
@Shade: ja gut, aber die allgemeine Form gilt aber:
MAX_INT = (2 hoch (Anzahl Bits – 1) –1)sagen wir unentschieden
-
Shade Of Mine schrieb:
freshman schrieb:
@Shade Of Mine: was stimmt denn daran nicht?
Dass ein int nicht zwangsläufig 32Bit hat.
ok vergessen wir das thema. aber schon komisch, dass du ausweihst indem du aufeinmal von int redest. (int != byte)
ich meinte ja nur, das man von 8 ausgehen, kann und darf. wenn man wirklich mal für eine solche exotische maschine ( die du mir immer noch nicht genannt hast) programmiert, dann sollte man das idr schon vorher wissen. maybe läuft auf soeiner maschine dann nichtmal der C-Compiler ( beispielsweise, also jetzt nicht drauf rumreiten bitte )
der webmaster nimmt mir mein neues spielzeug ( :xmas1: :xmas2: :xmas1: ) am 27.12 weg oder?
:xmas2: :xmas2: :xmas1: :xmas2: :xmas2:
-
freshman schrieb:
@Shade: ja gut, aber die allgemeine Form gilt aber:
MAX_INT = (2 hoch (Anzahl Bits – 1) –1)Vollkommen richtig. Und ich habe die Konstante für "Anzahl Bits" auch schon genannt.
[quote="newkid"]
Shade Of Mine schrieb:
freshman schrieb:
@Shade Of Mine: was stimmt denn daran nicht?
Dass ein int nicht zwangsläufig 32Bit hat.
ok vergessen wir das thema. aber schon komisch, dass du ausweihst indem du aufeinmal von int redest. (int != byte)
Weil freshman von 32 Bit geredet hat...
ich meinte ja nur, das man von 8 ausgehen, kann und darf.
Nur sinnvoll ist es nicht...
wenn man wirklich mal für eine solche exotische maschine ( die du mir immer noch nicht genannt hast
) programmiert, dann sollte man das idr schon vorher wissen.
Ich habe dir nen Link gezeigt, da stehen ein paar Beispiele.
Und wenn auf diesen Maschinen ein *BSD läuft, dann ist es nicht allzuabwegig, dass man dafür eine Anwendung schreibt. Natürlich nicht speziell für diese CPU, aber für *BSD - und das wird dann geportet.Ich verstehe nicht, was daran so schwer sein soll statt 8 CHAR_BIT zu verwenden, wenn man die Anzahl der Bits pro Byte berechnet...
maybe läuft auf soeiner maschine dann nichtmal der C-Compiler ( beispielsweise, also jetzt nicht drauf rumreiten bitte )
Wenn *BSD dort läuft, läuft alles dort.
Niemand streitet ab, dass ein 8 Bit Byte das gängigste ist.
Das sind so kleinigkeiten die ich einfach nicht verstehe. Der C Standard sagt: ein Byte/char hat exakt CHAR_BIT bits (vielleicht wechselt man in Zukunft ja aucg 16Bits?) und gut ist. Da gibt es eigentlich nichts zu diskutieren...
-
@newkid
Les dir nochmal den Beitrag von Shade durch. Das int ist in Zusammenhang mit freshmans Kommentar gefallen und nicht mit deinem.Nur weil du keine anderen Systeme kennst, die nicht 8 bit verwenden, gibt es sie dennoch. Es gibt vieles was du nicht kennst.
Was stellst du dir eigentlich bitte unter einem C-Compiler vor?? Ein C-Compiler für Windows läuft unter Linux auch nicht, auch auf der gleichen Maschine. Compiler müssen für jedes Betriebssystem explicit gebaut werden.
-
oh jungs. langsam kommts mir wie im kindergarten vor. leider sieht so aus als ob das kind wäre
ne ist gut, ihr habt recht und ich meine ruhe. :xmas1:
das mit dem C compiler hab ich so gemeint, wie ich es gesagt habe und wie du es gesagt hast. wenn es ne exotische maschine ist, und ein exotisches BS dann gibts maybe auch keinen c compiler. was ist daran schwer zu verstehen. die maschine aus dem jahre 58 oder so, das beispiel welches er genannt hat, hat bestimmt keinen c compiler, da es denn nicht gab. und ich glaube nicht, das fuer die kiste jetzt der neuste C compiler genommen wird, und fuer die kiste angepasst wird. ok?
ich meine nur wenn man fuer win oder linux programmiert(linux nicht super exotisch ), dann hat man mit 32/64 bit zu tun und 8bit/byte. wenn man jetzt so ne andere bit kiste hat, informiert man sich idr vorher und wenn man dann weiss das es 1zu6 sind, dann ist das ok. bei normalen win programmen kann man glaub ich ( zumindes NT-reihe ) zu 100% ausgehen, das es 1zu8 ist. und wenn man ein programm dafür schreibt, dann ist das IMMER so.
so genug daruerber gelabbert. ihr habt recht und ich meine ruh. :xmas1: :xmas2: :xmas1:
i love it :xmas1:
-
@newkid
Verstehen tust du es trotzdem wohl nicht, hab ich das Gefühl. Sagt dir eigentlich Portabilität was?