Resulttyp?!
-
er meint damit wahrscheinlich folgendes: c folgt einem satz recht einfacher, aber nicht immer sofort einleuchtender, regeln, was die umwandlung angeht.
du solltest versuchen zu verstehen, warum die regel so sind. die haben alle eine sinnvolle, wenn auch nicht immer offensichtliche, erklärung. ein stupides auswendig lernen, führt hier nur zu mäßigen erfolg.
so in deinem fall mit usigned short. die umwandlung erfolgt nicht entlang von signed/unsigned grenzen. das resultat sollte ein int sein, da int der größere, gleichwertige datentyp ist. bei unsigned int und int verhält es sich anders. hier greift die regel, dass unsigned typen den signed typen vorgezogen werden.btw. c definiert die meisten datentypen nur über mindestgrößen.
-
ghorst schrieb:
so in deinem fall mit usigned short. die umwandlung erfolgt nicht entlang von signed/unsigned grenzen. das resultat sollte ein int sein, da int der größere, gleichwertige datentyp ist. bei unsigned int und int verhält es sich anders. hier greift die regel, dass unsigned typen den signed typen vorgezogen werden.
Vielleicht wäre es in dem Fall doch mal sinnvoller, in den Standard zu gucken
int hat zwar den höheren Rang, ist aber nicht unbedingt "größer" als short.
-
ghorst schrieb:
du solltest versuchen zu verstehen, warum die regel so sind.
genau dass hab ich vor. ... und ich denke ich habs
ghorst schrieb:
so in deinem fall mit usigned short. die umwandlung erfolgt nicht entlang von signed/unsigned grenzen. das resultat sollte ein int sein
dies stimmt nur solange, solange ein int durch mehr bits/bytes intern dargestellt wird, als ein short. Da int, in diesem Fall den Wertebereich des kleineren Typen voll abdeckt, ist die Konversion problemlos. Diese Annahme ist jedoch nicht immer gegeben.
wenn int und short, sagen wir mal, gleich groß sind, dann greift die unsigned regel.
so hab ich dass jetzt verstanden. ich denke mal dass dies so richtig ist. für mich ist es jedoch plausibel. wenn dies jedoch immer noch falsch sein sollte, dann bitte ich um einen hinweis.
so far so long
mfg Manga
-
@bashar darum schrieb ich auch, dass die datentypen meist nur über ihr unteres ende definiert sind...
aber du hast völlig recht, es ist nicht zwangsläufig so, dass int größer ist als short. wobei das in den meisten systemen einen ähnlichen stellenwert hat, wie die frage, ob das byte aus 8bit besteht.
edit: @magna wenn die gleich groß sind, greift die unsinged regel. das ist richtig.
-
ghorst schrieb:
aber du hast völlig recht, es ist nicht zwangsläufig so, dass int größer ist als short. wobei das in den meisten systemen einen ähnlichen stellenwert hat, wie die frage, ob das byte aus 8bit besteht.
Die meisten Systeme? Ich könnte mir vorstellen, dass zahlenmässig mehr Embedded-Systeme mit 16-Bit-ints unterwegs sind als 32-Bit-Systeme. Und selbst wenn nicht, exotisch ist das auf keinen Fall.
-
Bashar schrieb:
Was nützt es, wenn du bei einer 50-50 Frage rätst? Das kann jeder selbst. Hättest du wenigstens fundiert geraten und eine plausible Begründung geliefert. Aber nein, du musst ja zwanghaft überall irgendwas antworten.
was heisst 'fundiert' raten? entwder man rät oder man weiss es. ein gefühl sagte mir, dass 'int' passen könnte.
btw: so hätte mans auch rausfinden könnenint a = -1; unsigned b = 1; if ((a&b) < 0) puts ("signed"); else puts ("unsigned");
-
^^ääh ich meine wenn b aus lauter einer-bits besteht.
-
Gefühle die einem "was sagen" sind nicht kompatibel zu C. Auch zum Programmieren ansich nicht.
Manchmal glaube ich, dass Dieter Nuhr heimlich programmiert.
-
Tim schrieb:
Gefühle die einem "was sagen" sind nicht kompatibel zu C. Auch zum Programmieren ansich nicht.
programmieren ohne intuition ist aber auch mist.
-
Bashar schrieb:
Die meisten Systeme? Ich könnte mir vorstellen, dass zahlenmässig mehr Embedded-Systeme mit 16-Bit-ints unterwegs sind als 32-Bit-Systeme. Und selbst wenn nicht, exotisch typist das auf keinen Fall.
ach mist, du hast recht. short ist auf 16bit systemen so groß wie int. mir schwirrte da was im kopf rum, dass die eine untergrenze von 8bit haben. vllt sollte ich doch erst denken und dann schreiben.