Resulttyp?!
-
Moin moin zusammen,
gegeben sei folgende deklaration:
int i;
unsigned int u;nun stellt sich die frage, welcher Resulttyp folgender Ausdruck liefert:
i & u
vielen danke schonmal vorab
mfg Manga
-
ich tippe mal auf 'int'
-
int x=1; unsigned int y=2; cout<<sizeof(x&y)<<endl; cout<<(x&y) - 3;
4 4294967293
-
fricky schrieb:
ich tippe mal auf 'int'
Und wenn i genativ ist?
-
elise schrieb:
int x=1; unsigned int y=2; cout<<sizeof(x&y)<<endl; cout<<(x&y) - 3;
4 4294967293
was willst du uns damit sagen?
und was sollen diesen ganzen shifts
-
fricky schrieb:
was willst du uns damit sagen?
Dass es in C++ unsigned ist. In C übrigens auch, wie ein kurzer Blick in den Standard zeigt ("Usual arithmetic conversions"). Wäre gut, wenn du dich manchmal mit deinen "Tipps" zurückhalten würdest.
-
@Bashar thx dir, jetzt weiß ich auch wo ich dass offiziell nachlesen kann ... wusst ich vorher nicht
@elise ich versteh den code leider nicht (habe noch nix in c++ geschrieben ... ) ... was ist z.b. cout?! so wie ich dass aus dem code herauslese gibt man so in c++ etwas aus!? ist das richtig?!
Dann Zeile 3 ... sizeof(x+y) ergibt auf einer 32-Bit-Maschine idR 4 egal ob unsigned oder nicht oder irr ich?! ... was bewirkt "sizeof(x+y) << endl"?! Um wieviel Stellen wird da geshiftet?! Oder was passiert dort.
mfg Manga
-
habe damit nur gezeigt, dass es unsigned ist.
lies nach über bitoperatoren und dazu noch über bereichsüberläufe.
steht sicher in deinem buch.
ob cout oder printf ist hier peripher egal .. sorry, habe nicht gesehen, dass es ansi c war.
-
In C gibts keine Funktionsüberladung, da hätte man es nicht analog zu elises C++-Beispiel zeigen können, aber vielleicht so:
int x = 0; unsigned y = 0; if ((x&y)-1 < 0) printf("int"); else printf("unsigned");
-
@elise ich war nur verwundert über cout und endl ... habs mittlerweile aber schon geklärt ... die ausnutzung des bereichsüberlaufes ist mir klar ... nur eins ist mir noch unklar ... wieso bin ich nicht selbst drauf gekommen
-Gruß Manga und thx nochmal @ll
-
Bashar schrieb:
Wäre gut, wenn du dich manchmal mit deinen "Tipps" zurückhalten würdest.
und wieso? sag jetzt nicht, weil ich falsch geraten habe. das kann ja wohl jedem mal passieren, mein lieber basher.
-
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.
-
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
-
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.