Frage zu char Typen
-
singed char und unsigned char sind klasse, wenn du kleine zahlen hast.
struct Datum unsigned char tag; unsigned char monat; signed short jahr; };Ähnlich lassen sich auch Fälle für signed char finden.
char ist dann das, was man für Zeichen benutzen mag. gerne unsigned, läßt sich ja am compiler einstellen.
-
Spielt also heute keine Rolle mehr?
noch eine kurze ander Frage: ab 32 - Bit OS gilt doch: int == long?
Vielen Dank
lg, freakC++PS.: Also ist char durchaus auch für Zahlen geeignet... ?!
-
freakC++ schrieb:
Spielt also heute keine Rolle mehr?
noch eine kurze ander Frage: ab 32 - Bit OS gilt doch: int == long?
Vielen Dank
lg, freakC++Nö.
Ab 64 ist long=64 und int=32
-
Auf 32 bit system ist aber der Wertebereich von int und long identisch! Wo liegt dann der Unterschied?? Char kann doch auch nur Zahlen bis 9 aufnehmen oder? Wenn nicht, wie weise ich dann einem char z.B. 45 zu?
Vielen Dank
lg, freakC++
-
Hä, 64bit kompiliert ist long doch 32bit und long long 64bit?!
-
Was ist denn long long? auch ein Datentyp..kannte ich gar nicht!
lg, freakC++
-
Dass int und long identisch sind, liegt an deinem Compiler.
Vorgeschrieben ist nur long >= int. Dass long und int gleich lang sind liegt einfach daran, dass es besonders günstig ist, wenn beide typen 32bit groß sind.Und wie man char den wert 45 zuweist? So: char a = 45;
char fast normalerweise 0 - 255
-
long long ist nicht standard. gcc kann das zB. Da isses dann 64 bit groß
-
freakC++ schrieb:
Wenn nicht, wie weise ich dann einem char z.B. 45 zu?
http://www2.fh-augsburg.de/informatik/vorlesungen/c_cplus/tutorial/henkel/Zeichen.html
-
long long ist C99, aber auch im Draft für den nächsten Standard.
Jeder integer Typ ist mindestens genauso groß wie sein Vorgänger, das ist alles was im Standard steht. Außerdem soll(nicht muss) int den nativen Integertypen der Plattform darstellen. Warum das auf 64-bit Plattformen nur selten der Fall ist, weiß ich nicht. Wahrscheinlich ein Zugeständnis an Programmierer die in ihren Programmen fest davon ausgegangen sind, dass int=32bit.
OT:
http://www2.fh-augsburg.de/informatik/vorlesungen/c_cplus/tutorial/henkel/Zeichen.html
void main() und iostream.h in einem Kurs von volkard? Ich glaube die Welt geht gleich unter...
-
volkard schrieb:
freakC++ schrieb:
Spielt also heute keine Rolle mehr?
noch eine kurze ander Frage: ab 32 - Bit OS gilt doch: int == long?
Vielen Dank
lg, freakC++Nö.
Ab 64 ist long=64 und int=32MSVC ist hier glaube ich anderer Meinung.
-
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?
-
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!Naja, vielen Dank für eure Hilfe. Dennoch habe ich irgendwie im Kopf, dass int gleich long auf 32 Bit ist. Ich muss nochmal in meinem Buch nachschauen!
Vielen Dank
lg, freakC++
-
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