Dezimal zu Hex und umgekehrt
-
Hallo,
ich habe ein Problem, bei dem ich einfach nicht mehr weiterkomme.
Ich hoffe die hier ansässigen Matheprofis können mir helfen.wenn ich die Zahl -3355444 als Dezimalzahl in den Taschenrechner (z.B. beim Windowsrechner) eingebe und dann auf Hexzahl umstelle kommt FFFFFFFFFFCCCCCC raus.
Jetzt möchte ich aber den umgekehrten Weg gehen. Und zwar wenn ich FFFFFFFFFFCCCCCC eingebe soll -3355444 rauskommen. Aber dem ist nicht so.
Es kommt ein rießige Zahl (18446744073706196172) raus.Wie komme von FFFFFFFFFFCCCCCC zu -3355444? Kann mir da jemand helfen
Gruß Andreas
-
das hat mit Mathe an sich nix zu tun, da musst du die Informatiker fragen.
Hex Zahlen sind eigentlich gedacht, um binäre Zahlen verkürzt darzustellen.
So ist:
1111 1111 1111 1111 = FFFF = 65535Der Computer kann in seinem Speicher kein minus oder plus abspeichern, der kann nur 0 oder 1 abspeichern. Also bleibt nix anderes übrig, als zu definieren was denn nun eine positive oder negative Zahl ist.
Deshalb hat man definiert, falls das erste Bit eine 1 ist, so ist die Zahl negativ.
So ist:
1111 1111 1111 1111 = FFFF = -1Dein Taschenrechner weiss das aber nicht!!!!!!
-
negative zahlen werden als 'zweierkomplement' dargestellt d.h. alle bits werden umgedreht und eins dazugezählt. das höchste bit wird als vorzeichen missbraucht (1 => -, 0 => +) der windoof-taschenrechner füllt, bei der umwandlung einer negativen zahl nach hex, alle unbenutzten bits nach links mit '1' auf, damit das höchste bit eine 1 ist (vorzeichenbit).
wenn man dann diese hexzahl wieder nach dez. konvertiert, interpretiert 'calc.exe' die zahl als positiv und zeigt eine riesengrosse positive zahl an. ich schätze, es ist einfach ein bug in 'calc'
-
electron_1 schrieb:
Deshalb hat man definiert, falls das erste Bit eine 1 ist, so ist die Zahl negativ.
Nein, net hat ja schon beschrieben, daß normalerweise das 2er-Komplement verwendet wird. Der Grund dafür ist auch ganz einfach. Mit der anderen Version hätte man +0 und -0 als unterschiedliche Werte.
MfG Jester
-
nun gut, du hast recht Jester, nur wie soll man etwas möglichst einfach erklären, ohne die Hälfte wegzulassen.
-
electron_1 schrieb:
nun gut, du hast recht Jester, nur wie soll man etwas möglichst einfach erklären, ohne die Hälfte wegzulassen.
das ist in der tat nicht immer leicht.
aber ist es nicht noch viel schlimmer, etwas dazuzuerfinden, was es so gar nicht gibt? ist es der fall, daß man nirgends von einem zweierkomplement reden kann? ich hab ja keine ahnung davon, aber das lange ding mit den vielen f am anfang sah mir aus wie eine fette hex-zahl im 16-er-komplement. und dem prozessor traue ich zu, daß er innendrin auch mindestens 4 bit auf einmal verrechnet. kann man da dann noch ehrlich von einem zweierkomplement sprechen, oder unterbreitet man dem schüler da eine pseudo-vereinfachung, die nirgends vorhanden ist?
-
volkard schrieb:
...und dem prozessor traue ich zu, daß er innendrin auch mindestens 4 bit auf einmal verrechnet.
glaube nicht. der hat's schon schwer genug mit 8 bits wenn's ein 32 bitter ist. da muß er per microcode immer dafür sorgen, daß die anderen bits des registers nicht beeinflusst werden.
-
Ein 16er-Komplement gibt es nicht.
Es gibt ein 1er-Komplement, hat aber technisch keine Bedeutung. Dient nur für die Schule zum herleiten des 2er-Komplement.
Und es gibt das 2er-Komplement.
Der Taschenrechner (oder Calc.exe) rechnet auch keine Register um, wobei er mit Beeinflussung von anderen Bits im Register keine Probleme hat.
Er rechnet einfach nur Zahlen von einem System ins andere, wobei er eine negative Hex-Zahl einfach nicht erkennt.
Ich glaube nicht mal, dass dies ein Bug ist, wahrscheinlich eher ein zu teueres feature.
-
electron_1 schrieb:
Ein 16er-Komplement gibt es nicht.
doch.
-
Es gibt das Stellenkomplement und das Zahlensystemkomplement. Und das kann man mit jedem Zahlensystem durchführen, auch mit dem 16er.
Ich glaube aber kaum, daß irgendein Rechner mit was anderem als dem 2er-Komplement arbeitet.
MfG Jester
-
Jester schrieb:
Ich glaube aber kaum, daß irgendein Rechner mit was anderem als dem 2er-Komplement arbeitet.
da muss ich dich aber eines besseren beleeren. man arbeitet drinnen gerne mit nem größeren zahlensystem. praktischerweise ne zweierpozenz.
innendrin gerne was fetteres, um das kleine 256 mal 256 in ne kleine hartverdrahtete tabelle werfen zu können. das macht rechnungen doch gelegentlich ein wenig schneller, oder?
im programm eh, da benutzt man das 256-er system oder noch größer. ist auch viel proaktischer, da einzelne bits schlecht adressierbar sind und ich elementare operationen in byte-größe und noch größer zur verfügung habe.
wenn die ganzen verfahren eh im 256-er-system sind, warum dann nicht auch ein 256-er komplement? ok, es sieht ganz aus, wie ein 2-er komplement. sogar haarenau gleich. aber wie ist es entstanden? lief die komplement-erstellende schleife in 8-bit-schritten über die zahl, war es nur ein befehl für 32 bit oder waren es 32 durchläufe?