Unterschied unsigned char & unsigned int

Gast #2200466
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?
Gast #2200475
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.
Gast #2200614
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
Gast #2200630
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' :-) )
Gast #2200643
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.
Gast #2202939
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren