unsigned char
-
hi
ich lese im c buch, dass es keine unsigned char gibt. OK.
Eine Aufgabe:
<<<<Das Zeichen 'c' soll als Datenobjekt mit und ohne Vorzeichen gespeichert werden.
Wie sehen die entsprechenden binären Codierungen aus???>>>>
Das Zeichen 'c' hat in der ASCII-Tabelle den dezimalen Wert 99.
Ohne Vorzeichen wäre es 01100011
und mit Vorzeichen??????
-
doch, es gibt unsigned char. Nur ist nicht definiert, ob char signed oder unsigned ist.
Wenn du etwas über negative Zahlen im Binärbereich wissen willst, solltest du dir das Zweierkomplement angucken.
-
Hallo,
Mein Beitrag war falsch. Naja, man lernt halt nicht aus.
-
Mit Vorzeichen hat der Wert die selbe Darstellung! Das ist im übrigen immer so (sofern der Wert überhaupt in den Definitionsbereich des signed & unsigned Typ passt).
Werte zwischen 000...000 bis 011...111 unterscheiden sich nicht. Bei einem unsigned Typ geht es danach weiter mit 100...000, 100...001, usw. bis der größt mögliche Wert 111...111 erreicht wurde (z.B. 255) - der nächste Wert führt zu einem Überlauf, so dass man wieder bei Null (00...00) beginnt.
Bei einem signed Typ ist bereits 011...111 der "größte" darstellbare Wert (z.B. +127) und der nächste Wert ist hier schon >logisch< ein Überlauf, denn 100...000 ist hier der "kleinste" darstellbare Wert (z.B. -128). Dann geht es weiter mit 100...001 (= -127) usw. bis 111...111 (= -1). So am Rande: Weil -1 bedeutet, dass alle Bits 1 sind, wird in C der Wert -1 auch oft für "true" verwendet, entsprechend 0 für "false".Warum ist das so: Es können (zumindestens für + und -) die selben CPU-Befehle verwendet werden, d.h. die CPU unterscheidet nicht zwischen der Addition von 2 signed und unsigned 16Bit-Werten! Es werden einfach 2 16Bit-Werte Addiert oder Subtraiert (oder wieviel Bit auch immer). Wie dieser Wert anschliessend dargestellt wird, ist reine Interpretationssache!
Beispiel:
-1 + 2 = "111...111" + "000...010" = "000...001" (und Überlaufflag ist gesetzt) = 1
ist das gleiche wie
255 + 2 = "111...111" + "000...010" = "00...001" (und Überlaufflag ist gesetzt) = 1 (257 modulus 256)Für Multiplikation und Division gibt es dann allerdings schon unterschiedliche CPU-Befehle!
-
wischmop2 schrieb:
So am Rande: Weil -1 bedeutet, dass alle Bits 1 sind, wird in C der Wert -1 auch oft für "true" verwendet, entsprechend 0 für "false".
Wir sind aber im C++ Forum, und da evaluiert true zu 1. In C dürfte das nicht viel anders sein. Ansonsten, nette Erklärung.
-
groovemaster schrieb:
Wir sind aber im C++ Forum, und da evaluiert true zu 1. In C dürfte das nicht viel anders sein.
In C ist es genauso. 0 steht für false, und !0 ist 1.
-
@wischmop2
Danke für die liebe und ausführliche Erklärung!!!