Ich bin noch ziemlicher Anfänger und habe folgende Frage. Bei mir im Code habe ich einige Variablen, die vom Wertebereich her in eine 8 bit unsigned char Variable passen. Kann ich nun in meinem Programm einfach in der Deklaration "unsigned int" und "unsigned char" austauschen? Oder wird eine unsigned char Variable immer als Zeichen interpretiert und ein Vergleich z.B. if(i>5) kann gar nicht ausgeführt werden?
Ein unsigned char passt in einen unsigned int rein, das ist kein Problem. Ein char wird auch nicht als Zeichen interpretiert, nur weil er char heißt, das ist nur eine Nummer.
unsigned int = uint16_t = 16 Bit unsigned char = uint8_t = 8 Bit (das war ja schon klar) Man kann 8-Bit Zahlen mit Zeichen vergleichen. Ich nehme für Zahlen die '?int??_t'-Deklaration und für Zeichen 'char'. Nur wegen der Übersichtlichkeit.
Ralf schrieb: > Nur wegen der Übersichtlichkeit. Das sollte man nicht nur wegen der Übersichtlichkeit so machen, sondern auch, weil es so richtig ist. Der C-standard und auch (neuere) gcc unterschieden tatsächlich zwischen den Datentypen char, signed char, und unsigned char. Auch wenn die alle drei 8 Bit groß sind, ist der Datentyp "char" für Zeichen und Zeichen-Verarbeitende Funktionen vorgesehen, signed char und unsigned char dagegen zur Darstellung von ganzen Zahlen. Oliver
Oliver schrieb: > signed char und unsigned > char dagegen zur Darstellung von ganzen Zahlen. ... und deswegen zur Übersichtlichkeit, eine Typenbeschreibung die passt. Für eine Zahl dann 'int', 'BYTE', 'DWORD' - was der Compiler hergibt. Für den GCC habe ich mich auf 'uint8_t' usw. eingestellt. (Außerdem: wenn 'char' ein Zeichen (Character) sein soll, klingt 'signed char' so wie 'Buchstabe mit Vorzeichen' :-) )
Ralf schrieb: > unsigned int = uint16_t = 16 Bit Nicht ganz. Es gilt unsigned int >= uint16_t Ralf schrieb: > Für eine Zahl dann 'int', 'BYTE', 'DWORD' - was der Compiler > hergibt. Nachdem uint8_t usw. schon länger standardisiert sind, sollte man diese auch benutzen, falls es auf die Wortbreite ankommt, nicht BYTE, DWORD usw.
Frickler schrieb: > Nicht ganz. Es gilt unsigned int >= uint16_t ... kommt halt auf den Compiler an. Frickler schrieb: > Nachdem uint8_t usw. schon länger standardisiert sind, sollte man diese > auch benutzen Genau.
Steffen schrieb: > Ich bin noch ziemlicher Anfänger und habe folgende Frage. > > Bei mir im Code habe ich einige Variablen, die vom Wertebereich her in > eine 8 bit unsigned char Variable passen. > > Kann ich nun in meinem Programm einfach in der Deklaration "unsigned > int" und "unsigned char" austauschen? Oder wird eine unsigned char Ja. > Variable immer als Zeichen interpretiert und ein Vergleich z.B. if(i>5) > kann gar nicht ausgeführt werden? Nein, sowas wie "Zeichen" gibt es als Konzept auf der Ebene von C nicht wirklich und auf der Ebene der Maschinensprache garnicht. Der einzige Unterschied zwischen unsigned char und unsigned int ist der minimale garantierte Wertebereich - der tatsächliche Bereich kann aber auch identisch sein.
Ralf schrieb: > ... kommt halt auf den Compiler an. Nein, uint16_t hat genau 16 Bit, unsigned int hat laut C Sprachdefinition mindestens 16 Bit
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.