Resulttyp?!



  • 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.


  • Mod

    int und unsigned int ist langweilig. Interessanter ist das Ganze mit
    int i;
    unsigned short u;



  • @camper wenn ich dass, was ich unter "Usual arithmetic conversions" gefunden habe, recht verstanden habe, dann kommt da int bei herum

    mfg & gn8 Manga



  • Manga schrieb:

    @camper wenn ich dass, was ich unter "Usual arithmetic conversions" gefunden habe, recht verstanden habe, dann kommt da int bei herum.

    mfg & gn Manga

    Lautete so deine ursprüngliche Aufgabe? Das Ergebnis nachzuschlagen?
    Das ist natürlich umheimlich sinnvoll, einen Normtext nachzuplappern, ohne nun auch irgendeine Ahnung davon zu haben, worum es geht.



  • Lautete so deine ursprüngliche Aufgabe? Das Ergebnis nachzuschlagen?
    Das ist natürlich umheimlich sinnvoll, einen Normtext nachzuplappern, ohne nun auch irgendeine Ahnung davon zu haben, worum es geht.

    @johnny_legend ich weiß ja nicht wass du mich hier von der Seite schief anredest ... aber verzeihe, dass ich hier der Thread aufgemacht habe, da mir etwas unklar war und ich versuchen wollte dies zu beseitigen. ... ohne lesen und recherchieren lassen sich denke ich kaum wissenslücken schliessen ...

    gruß manga


  • Mod

    johnny_legend schrieb:

    Das ist natürlich umheimlich sinnvoll, einen Normtext nachzuplappern, ohne nun auch irgendeine Ahnung davon zu haben, worum es geht.

    Und der Sinn hiervon? Was soll man denn sonst tun, wenn man keine Ahnung hat?

    @Manga: Unter bestimmten Umständen hat das Ergebnis nicht den Typ int. Wenn dir diese Umstände klar geworden sind, kannst du leicht das Prinzip erschließen, dass sich hinter diesen "usual arithmetic conversions" verbirgt.



  • @camper ich bin die ganze zeit am überlegen welche umstände du meinst. ich denke da an die interne repräsentation der beiden datentypen ...

    short ist, wenn ich dass richtig recherchiert habe stets 2Byte groß
    int-Größe ist Systemspezifisch: 16,32 oder 64-Bit ... wenn ein int mit > 16Bit implementiert ist, dann kommt int heraus, da sich der wertebereich von unsigned short in int abbilden lässt.

    ist int jedoch als 16-bit implementiert, so ist dies schwierig. was jetzt passiert weiss ich nicht. ich vermute aber, aufgrund deiner äußerung, dass nun der int in ein unsigned short konvertiert wird

    Gruß manga



  • 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önnen

    int 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. 😉


Anmelden zum Antworten