Forum: Compiler & IDEs Unterschied unsigned char & unsigned int


von Steffen (Gast)


Lesenswert?

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?

von AKKS (Gast)


Lesenswert?

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.

von Ralf (Gast)


Lesenswert?

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.

von Oliver (Gast)


Lesenswert?

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

von Ralf (Gast)


Lesenswert?

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' :-) )

von Frickler (Gast)


Lesenswert?

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.

von Ralf (Gast)


Lesenswert?

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.

von Jasch (Gast)


Lesenswert?

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.

von Michel (Gast)


Lesenswert?

Ralf schrieb:
> ... kommt halt auf den Compiler an.

Nein, uint16_t hat genau 16 Bit, unsigned int hat laut C 
Sprachdefinition mindestens 16 Bit

von Ralf (Gast)


Lesenswert?

Michel schrieb:
> unsigned int hat laut C
> Sprachdefinition mindestens 16 Bit

Sag' ich doch.

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
Noch kein Account? Hier anmelden.