FF(hex) in Dezimal

01/16/2016 19:05 NRj™#1
Warum ist FF(hex) neben 255 auch noch -128?
01/16/2016 19:13 Mysthik#2
Du benutzt vermutlich ein vorzeichen behafteten 8-Bit Datentyp.
01/16/2016 19:21 Jeoni#3
Wo ist 0xFF denn -128? Im Zweierkomplement (8 bit) wäre 0xFF halt -1. -128 wäre dort 0x80.
Mehr dazu HIER. Finde das recht gut erklärt, aber gibt sicher auch noch viele andere Seiten, die das Erklären. Ist halt eine bequeme Konvention, um negative Zahlen darzustellen. "Bequem" daher, weil sich Additionen damit ohne weiteres durchführen lassen:
(Annahme von 8 bit Zahlen)
1 - 1 = 0
1 + (-1) = 0

0x01
+ 0xFF
------
0x100
Man nimmt nur so viel vom Ergebnis (von hinten), wieviel man auch zum Rechnen benutzt hat, also in dem Fall 8 bit, und kommt so auf ... 0x00 = 0.
Mit freundlichen Grüßen
Jeoni
01/17/2016 07:18 algernong#4
In der Vorzeichen-Betrag-Form (mit 8 Bit) ist 0xFF immerhin -127. Auch noch knapp daneben.

0xFF kann neben 255 *alles* sein, solange du keine Architektur dazu angibst. Es ist nicht naturgegeben, wie eine Zahl interpretiert wird - das darf jede Rechnerarchitektur so machen, wie sie will. Du kannst auch einen Rechner bauen der jede Zahl als Element vom Restklassenkörper Z/2Z betrachtet, dann ist 0xFF neben 255 auch 1, -1, 3, -3, 5, -5, ... (leider aber auch nicht -128).
01/17/2016 09:41 Mysthik#5
Quote:
Originally Posted by algernong View Post
In der Vorzeichen-Betrag-Form (mit 8 Bit) ist 0xFF immerhin -127. Auch noch knapp daneben.
Das ist doch nur dann der Fall, wenn man die Null doppelt hat (negativ und positiv). Das ist dann nicht mehr ganz die Vorzeichen-Betrag-Form könnte aber die -128 würde damit glaube ich passen.
01/17/2016 10:58 algernong#6
Verstehe nicht so ganz, wie du das meinst.

Bei der Vorzeichen-Betrag-Form ist die 0 doppelt, ja. Deswegen gibt es bei IEEE 754 auch +0 und -0. 0xFF ist in der Form aber -127, weil 0b0111 111 = 127, und durch die 1 als MSB ist es -127.
01/20/2016 19:04 NRj™#7
Sorry ihr habt recht. Neben 255 kann es auch -1 sein.
Andere Frage: Man will eine Zahl in Binär ins negative bringen. Z.b 3

3 = 0000 0011
Zweierkomplement:

invertieren:
1111 1100
+
0000 0001
=
1111 1101 = -3?

Ist das jetzt dezimal gleichbedeutend wie dezimal +253?
01/20/2016 19:19 ComputerBaer#8
Quote:
Originally Posted by NRj™ View Post
Ist das jetzt dezimal gleichbedeutend wie dezimal +253?
Ja.

Aus dem Grund solltest du immer wissen ob der Datentyp ein Vorzeichen hat oder nicht. Wenn das eine Programm -3 schreibt, du +253 liest und versuchst damit etwas "auszurechnen" (ich meine damit auch Schleifen oder irgendwelche Funktionen/Methoden), dann kannst du leicht auf ein komplett flasches Ergebnis kommen.