
Was kommt wohl da raus:
Code: Alles auswählen
printf(" %d\n", sizeof 'A' );
"1", ist doch klar, oder? Oder nicht?
Edit by Xin: Betreff erweitert
Code: Alles auswählen
printf(" %d\n", sizeof 'A' );
Ohne es ausprobiert zu haben... in C kommt 4 raus, in C++ 1? Oder wars umgekehrt? ^^mfro hat geschrieben:?Code: Alles auswählen
printf(" %d\n", sizeof 'A' );
"1", ist doch klar, oder? Oder nicht?
Völlig korrekt (falls sizeof(int) == 4 auf deiner Maschine). Aber warum?dani93 hat geschrieben:Ohne es ausprobiert zu haben... in C kommt 4 raus, in C++ 1?
Code: Alles auswählen
const char c = 'A';
printf(" %d\n", sizeof c);
Weil in C Character-Literale noch vom Typ int sind. Ich kann mich erinnern mal einen Stackoverflow-Artikel gelesen zu haben, bei welchem Code ein C++ Compiler ein anderes Programm liefert als ein C Compiler, beim gleichen Code.mfro hat geschrieben:Daß da nicht "1" rauskommt, war ja nach der Überschrift schon klar.
Völlig korrekt (falls sizeof(int) == 4 auf deiner Maschine). Aber warum?dani93 hat geschrieben:Ohne es ausprobiert zu haben... in C kommt 4 raus, in C++ 1?
Code: Alles auswählen
#include <stdio.h>
int main(int argc, char *argv[])
{
const char c = 0xff;
printf("0x%02x\n", c);
}
Jettzt wirds verwirrend ^^ Ich schätze mal es hat damit zu tun, dass das char -1 ist, dann in ein int umgewandelt und das Zweierkomplement ergänzt wird. Aber warum?!mfro hat geschrieben:Was kommt denn wohl dabei raus? "0xff"?Code: Alles auswählen
#include <stdio.h> int main(int argc, char *argv[]) { const char c = 0xff; printf("0x%02x\n", c); }
Bestimmt nicht, sonst gäb's ja diesen Beitrag nicht.
Aber was? Und warum?
c ist (auf Maschinen, auf denen der Typ char signed ist, das ist nicht immer so) 0xff, also -1, richtig.dani93 hat geschrieben:Jettzt wirds verwirrend ^^ Ich schätze mal es hat damit zu tun, dass das char -1 ist, dann in ein int umgewandelt und das Zweierkomplement ergänzt wird. Aber warum?!mfro hat geschrieben:Was kommt denn wohl dabei raus? "0xff"?Code: Alles auswählen
#include <stdio.h> int main(int argc, char *argv[]) { const char c = 0xff; printf("0x%02x\n", c); }
Bestimmt nicht, sonst gäb's ja diesen Beitrag nicht.
Aber was? Und warum?
Code: Alles auswählen
int printf(const char *format, ...);
Code: Alles auswählen
printf("%02x ", c & 0xff);
Code: Alles auswählen
const unsigned char c = 0xff;
printf("%02x %02x\n", c, (char) c);