Wie speichert ein Computer Dezimalzahlen und wie gibt er sie wieder aus?
-
Hallo!
Also Computer rechnen mit Bits .... soviel weiß ich ... aber wie kommt der Computer von Dezimalzahlen zu den Bits und wieder zurück ... wie macht er z.B. aus 2 Bytes eine Zahl (HByte, LByte)?
LG
-
Was? aus 2 Bytes macht er halt eine bis zu 2^16-1 große Ganzzahl. Wenn du des mit 1 Byte kapierst, kapierste es ja auch mit 2 oder 4. Bei Dezimalzahlen musste dir mal IEEE 754 googlen.
-
der computer fasst einfach meherere bits zusammen. ein bit hat ja bekannterweise zwei zustände und kann daher zwei verschiedene zahlen bedeuten. nimmt man zwei bits, dann hat man 4 zustände, kann also 4 zahlen speichern. bei 3 bits sind es schon 8 usw. durch spezielle software können diese bitmuster in menschen-lesbare zahlen (bei der ausgabe) umgewandelt werden und bei der eingabe werden aus zahlen diese bitmuster für die speicherung in der maschine generiert.
--> http://de.wikipedia.org/wiki/Dualsystem
-
Stichwort Umrechnen von Zahlensystemen
wird z.B. dort beschrieben
http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htmgruss
-
Der Computer kennt keine Dezimalzahlen. Die werden doch nur für den Menschen bildlich dargestellt, auf dem Bildschirm oder Drucker. Dazu muß (wie bereits gesagt) umgerechnet werden. Aber selbst die Umrechnung ist am Ende nur Bits.
-
Das ist ja gerade das was mich interessiert!
Das der Computer mit Dualzahlen arbeitet ist mir bewusst ...
Der Computer kennt keine Dezimalzahlen. Die werden doch nur für den Menschen bildlich dargestellt, auf dem Bildschirm oder Drucker. Dazu muß (wie bereits gesagt) umgerechnet werden. Aber selbst die Umrechnung ist am Ende nur Bits.
Das ist ja das Problem:
Wenn ich dem Computer die Aufgabe 12 - 5 stelle, wandelt er 12 und 5 in ein Zahlensystem zur Basis 2.
Für diesen vorgang, kann er aber keine Verfahren wie dieses http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm verwenden, weil er ja beim Einlesen der 12 garnicht gucken kann, ob die 8 in die 12 reinpasst ... folglich kann er auch kein Bitmuster erstellen ... also ... wie kommt der Computer von der Dezimalzahl, welche ich eingebe, zu der Dualzahl, mit der er selber rechnet?LG
-
Ich weiß nicht, wo dein Problem liegt. Die Zahlen, die du eingibst kommen als Buchstaben an. Addieren und Multiplizieren kann der Rechner.
Nun drehen wir die Zahlen erstmal um, das machts einfacher:
21 und 5Bekannt ist:
1 => 1
2 => 10
3 => 11
etc.Dann wird auf den Zahlenstring einfach sowas in der Art angewandt:
potenz sei 1 wert sei 0 für alle i im string: addiere (zahlenwert von i) mal potenz auf wert multipliziere potenz mit 2
-
Jedes Zeichen in einem String hat einen Zahlenwert. je nach codierungsverfahren von 0 bis 255 oder auch mehr. Das einfachste ist ASCII hier werden die ziffern wie folgt codiert.
'0' 48 0x30
'1' 49 0x31
...
'9' 59 0x39was macht man nun? man fängt bei einer zahleneingabe von vorne nach hinten sprich von der höchsten bis zur niedrigsten stelle an.
Der Zahlenwert des Zeichens muss gültig sien sprich zwischen 0 und 9 liegen.
dann wird von diesem Zahlenwert der Zahlenwert des zeichens '0' abgezogen.
Das ergebnis ist der wert der Ziffer. Das ganze passiert im Dualsystem, dem Zahlensystem mit dem der PC auch rechnen kann.um jetzt aus mehreren ziffernwerten eine zahlenwert zu bilden kann man ja
(((Ziffernwert1) * 10 + Ziffernwert2) * 10 + Ziffernwert3) rechnen. Das ganze läost sich auch in einer schleife erschlagen.
char input[5] = "1234"; int i = 0; /* loop counter */ int ergebnis = 0; while(input[i] != 0) { ergebnis = (input[i] - '0') + (ergebnis * 10); i++; }
gruss
-
char input[5] = "123";
int i = 0; /* loop counter */
int ergebnis = 0;while(input[i] != 0)
{
ergebnis = (input[i] - '0') + (ergebnis * 10);
i++;
}und wie funktioniert das für
bool ergebnis[8] = {0};
?
LG
-
wieso
bool ergebnis[8] = {0};
ein int ist nur eine representation für einen binären datenwert, der z.B. 32 stellen / bits hat.
sprich wenn du das programm übersetzt, führt der PC das auch binär aus und rechnet auch so. wenn ich z.B. * 10 schreibe ist das gleichbedeutend wie wenn ich mit 1010b multiplizieren würde oder mit 0xA. Nur du siehtst die 0en und 1en nicht weil dir der Compiler, Debuger immer einen für menschen verständlichen zahlenwert darstellt. ( darum nennt sich c auch eine hochsprache )
gruss
-
Gut, ich erzähle mal etwas genauer, was ich machen möchte ....
Ich möchte einen Datentyp schaffen, der einen unsigned int Wert mit (theoretisch)
unendlicher länge speichert .... die Eingabe der "unendlichen" Zahl soll durch Strings gemacht werden.Ich habe mir das so vorgestellt, dass ich eine Datenstruktur habe, die einen Zeiger auf den nächsten Ziffernblock hat und den Ziffernblock selber. Wenn der Zeiger Null terminiert ist, ist die Zahl "zuende". Ich dachte also an einen Datentyp mit einer Basis <= unsigned int.
Das Problem, welches ich habe, ist es eine Dezimalzahl in eine "unsigned int Zahl umzurechnen ...
Ich weiß eigentlich nicht genau, wie ich überhaupt an die ganze Sache rangehen soll .... meine Zielstellung habe ich ja nun geschildert .... Ihr könnt mir ja Vorschläge zur durchführung nennen ....
Ich für meinen Teil habe mir das jedoch so vorgestellt, dass ich einfach einen bestehenden Datentyp nehme und ihn so oft wie nötig hintereinander hänge, bis auch meine Zahl hinein passt. Das Problem sind weniger, wie später die Rechnungen (+,-,*,/) aussehen, sondern wie ich die Dezimalzahl umwandle ... daher die Frage, wie das der Computer macht!?
Ich hoffe mein Problem ist klar geworden ... ansonsten nachfragen ....
LG
-
Evtl. ist es ja auch klüger weiterhin im Binärsystem zu bleiben und soviele unsigned int's wie nötig hintereinander zu hängen .... also einen n-Byte-Typ
LG