Binär zu Dezimal
-
Hi, ich dachte mir ich schreibe mal eben einen binärrechner der binär zu dezimal rechnet, ist mir auch ganz gut gelungen nun ist mir nur eingefallen das mein lehrer erwähnte das bei int oder sonstigen zahlenwerten die signed sind das erste bit das vorzeichen ist, stimmt das? ich habe leider durch google keine genau anleitung zum binärrechnen gefunden, jedenfalls keine die diese vorzeichen mit beachtet.
-
Das stimmt auch.
Aber solange Du nur positive Zahlen verarbeitest, bemerkst Du den Unterschied gar nicht.
Dein Umwandler funktioniert vermutlich ganz ordentlich und macht dabei nichtmal Annahmen über die erlaubten Eingabezahlen, z.B. macht er aus 1010(B) ein 10(D) und gut ists. Dabei ist es egal, ob int gerade 16 oder 32 oder 64 bit hat. Das finde ich wunderbar und trifft das Wesen eines "Binär zu Dezimal"-Umwandlers fein.
Willst Du da darüberhinaus genau die Binärdarstellung in Deinem Rechner abbilden, dann hast Du was mit dem Zweierkomplement zu überlegen. Google hilft bestimmt. Da war irgendsowas, wie daß Du in diesem Fall (also wenn das Bit 31 gesetzt ist) erst die Zahl invertierst, also aus jeder 0 ne 1 machst und aus jeder 1 ne 0 und dann noch 1 addierst und dann haste die negierte Binärzahl. Und dann schreibst Du auf den Bildschirm erstmal '-' und dann verwandelst Du die negierte Binärzahl, die ja jetzt durch das negieren doch wieder positiv ist, ganz normal in die Dezimalzahl.
Viel Spaß dabei!
-
*g naja ich hab int einfach als 4 byte genommen da das bei uns nunmal der regelfall ist ( zumindest in der schule mit c auf diesen computern ) und nochn paar andere wertentypen ^^
und 1010 könnte man wohl schlecht verarbeiten in meinem da ich vorher überprüfe ob die länge der zeichenkette modulo 8 null ergibt ^^''
aber wenn das erste bit jetzt 0 ist steht es im falle eines ints dann für +?
und wenn es 1 ist ist es dann nur minus oder muss ich trotzdem noch einmal 2^0 dazu rechnen?
-
das ganze läuft so ab...
positive Zahlen (egal, welcher Basis), lassen sich nach links beliebig mit nullen auffüllen (00123d ist das gleiche wie 123d, 1010b entspricht 00001010b)
Wenn du mit vorzeichenbehafteten (signed) Zahl wird das MSB (Most Significant Bit, also das Bit mit dem höchsten Wert [in der Regel ganz links]) als Vorzeichen gesehen. 0 steht für +, 1 für -
Die Umrechnung erfolgt über das sogenannte Zweierkomplement
Zum Beispiel willst du die Zahl -10d als 8Bit-Zahl darstellen.
10d entspricht bekanntermaßen 1010b00001010 auf 8 Bit aufgefüllt 11110101 Kehrwert (0->1, 1->0) (Einerkomplement) + 1 1 Addieren (Zweierkomplement) --------- 11110110 (entspricht -10)
umgekehrt gehts genauso.
Falls du eine negative Zahl in einen größeren Zahlenraum bringen willst, musst du mit 1sen auffüllen (nicht wie sonst mit 0). Das kannst du erkennen, wenn du mit dem Windows-Taschenrechner eine negative Dezimalzahl in eine Binärzahl umwandelst
Also ist 10110b ebenfalls -10dWenn du also auch negative Zahlen beachten willst, dann musst du dich auf eine Wortbreite festlegen, an die sich auch der User halten muss. Wenn dann doch mal eine Zahl mit geringerer Wortlänge eingegeben wird, musst du erwartungsgemäß den Rest mit Nullen auffüllen. Kein User gibt gerne 31 Nullen ein, nur weil er 1b in Dezimal haben will