Frage zu char Typen
-
freakC++ schrieb:
Hallo,
ok, dann habe ich recht bei meiner Vermutung gehabt. sfgd schrieb, dass ich einem char Wert so 45 zuweise: char a = 45. Das ist natrlich nicht ganz richtig, weil hier nicht 45 zugewiesen wird, sondern der ASCII Code und daher ein Zeichen. Darauf wollte ich eigentlich heraus!Doch, 45 und '-' zugleich, die kannst Du gar nicht trennen, weil sie das selbe sind. Die Trennung ist erfunden.
char a=45; char b=a*2; cout<<int(b)<<'\n';//90 cout<<char(b)<<'\n';//ZEs steht eine 45 bzw 90 drin. Das Interpretieren als Zeichen ist nur eine Sache der Ein- und Ausgabe.
-
Du rechnest mit char genauso wie mit allen anderen Integertypen
Beispiel
int a = 45; //intern: 00000000000000000000000000101101
char b = 4; //intern: 00101101Merkste? da steht genau das selbe drin! Nur halt mit weniger Bits. Das Rechnen läuft damit genau gleich ab (ob jetzt a*=2 oder b*=2 zB. ). Bloß interpretiert der compiler das anders. Während er bei cout<<a; einfach die zahl ausgibt wandelt er bei cout<<b; die zahl in den entsprechenden ascii code um. Intern ist es aber immernoch die Zahl!
-
*edit: so sollte es heißen :>
int a = 45; //intern: 00000000000000000000000000101101 char b = 45; //intern: 00101101
-
sfgd schrieb:
Du rechnest mit char genauso wie mit allen anderen Integertypen
Besser nicht!!
int main() { char ch = 100; ch += 45; std::cout << int(ch) << std::endl; return 0; }Sollen wir abstimmen, was da ausgegeben wird?
Stefan.
-
DStefan schrieb:
sfgd schrieb:
Du rechnest mit char genauso wie mit allen anderen Integertypen
Besser nicht!!
int main() { char ch = 100; ch += 45; std::cout << int(ch) << std::endl; return 0; }Sollen wir abstimmen, was da ausgegeben wird?
Schreib ein signed oder unsigned davor und alle sind sich einig. Ist dann ganu wie bei integer erwartet.
-
SeppJ schrieb:
Schreib ein signed oder unsigned davor und alle sind sich einig. Ist dann ganu wie bei integer erwartet.
Naja ... mein Punkt war halt der, dass kein signed oder unsigned davor stand. Und dass sfgd vorschlug, man solle mit char genauso rechnen, wie mit anderen int-Typen. Die Ausgabe meines Beispiels wäre aber undefinert.
BTW: Ist char laut Standard wirklich ein int-Typ? Oder bloß als int-Typ verwendbar bzw. in einen konvertierbar?
Stefan.
-
Was ist Deine Definition von "int-Typ"?
Wenn man mit char oder short rechnen will, wird zumindest eine "Promotion" durchgeführt. Das heißt, chars und shorts werden vorher zu int konvertiert, bevor "gerechnet" wird.
Eine Seite, die auch gerne verlinkt wird, ist diese hier: Integer Types in C and C++.
Gruß,
SP
-
DStefan schrieb:
BTW: Ist char laut Standard wirklich ein int-Typ? Oder bloß als int-Typ verwendbar bzw. in einen konvertierbar?
char ist laut Standard ein int Typ.
-
DStefan schrieb:
Die Ausgabe meines Beispiels wäre aber undefinert.
Nicht undefiniert, sondern implementierungsabhängig. Wichtiger unterschied!
DStefan schrieb:
BTW: Ist char laut Standard wirklich ein int-Typ? Oder bloß als int-Typ verwendbar bzw. in einen konvertierbar?
Laut Standard werden
bool,wchar_t,charund allesignedundunsignedInteger Typenintegral typesgenannt. Ein Synonym für integral type ist integer type.
float,double,long doubleund alle integer types nennt man auch arithmetic types (wichtig für Operationen).Grüssli
-
volkard schrieb:
hustbaer schrieb:
volkard schrieb:
Ab 64 ist long=64 und int=32
MSVC ist hier glaube ich anderer Meinung.
Mist. Ich verwende MSVC nicht. Wie ist da bei 64-Bit-Builds int und long?
ist bei 32 und 64 bit builds gleich: int = 32 bit, long = 32 bit, long long = 64 bit