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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.