Kann der Windows-Rechner Dezimalbrüche in Binärzahlen konvertieren?

1115
barlop

Angenommen, ich habe eine Nachkommastelle wie 0,21

Kann der Windows-Rechner das in binär konvertieren?

Wenn ich versuche, im Programmiermodus 0.21 einzugeben, reagiert es nicht auf das Dezimalzeichen. Es ist so, als ob ich im Programmierermodus keinen Dezimalpunkt eingeben kann. Im Programmierermodus kann ich auch keinen Binärpunkt eingeben, wenn ich im Programmiermodus binär auswähle. Der "Punkt" scheint deaktiviert zu sein.

Ich verwende Windows 7. Ich weiß nicht, ob dies in Windows 10 aktiviert wurde.

Hinzugefügt
oder wie wäre es mit einem einfacheren Beispiel wie 2.5 oder 5.125, also ein gebrochener Teil, der binär dargestellt werden kann? Für 2.5 sollte dieser Calc also 010.10 oder 1.10 * 2 ^ 3 anzeigen. Oder für 5.125 sollte der Rechner 0101.001 oder 1.01001 * 2 ^ 5 anzeigen. 5 Kann der Windows-Rechner das anzeigen?

-3
Dies liegt daran, dass Sie Brüche nicht binär darstellen können. Keltari vor 6 Jahren 0
Nicht ganz richtig. Sie können, aber Windows-Rechner wird nicht angezeigt. Wenn wir eine Zahl sehen, sagen wir "123", denken wir nicht einmal so, aber in Wirklichkeit kann die Zahl in "1 * 10 ^ 2 + 2 * 10 ^ 1 + 10 ^ 0" durch unterteilt werden die gleiche Logik "123.45" ist "1 * 10 ^ 2 + 2 * 10 ^ 1 + 3 * 10 ^ 0 + 4 * 10 ^ (- 1) + 5 * 10 ^ (- 2)". Das Gleiche passiert mit der binären Mathematik, außer dass Sie nur 2 Ziffern haben (dargestellt durch "0" und "1") und die Basis des Systems ist "2" und nicht "10". "0.21" könnte also als "0.0011010111" betrachtet werden, was als "0.209961" angenähert wird. Ich habe nur 10 Binärziffern verwendet, der IEEE-754-Standard gibt viel mehr an ... nurchi vor 6 Jahren 0
@nurchi Sie meinen, dass Keltari nicht richtig ist. Sie antworten Keltari nicht auf mich, also schreiben Sie bitte zu Beginn Ihres Kommentars AT Keltari. Es ist also klar, dass Sie sich auf ihn bezogen haben und nicht auf mich barlop vor 6 Jahren 0
Anscheinend kann ich meinen Kommentar nicht mehr bearbeiten, aber ja, ich bezog mich auf @ Keltaris Kommentar, nicht auf die Frage selbst. nurchi vor 6 Jahren 0

2 Antworten auf die Frage

2
AnSi

Im Allgemeinen kann der Bruchwert in binärer Form dargestellt werden, wobei eine Art "binärer Punkt" (Gegenstück zum Dezimalpunkt) verwendet wird. Tatsächlich werden auf diese Weise reelle / doppelte Zahlen in Computern dargestellt (obwohl normalerweise binäre Punktpositionen anstelle des "Punktzeichens" gespeichert werden). Aber denken Sie daran: Nicht alle Dezimalbrüche können in binärer Form genau dargestellt werden. Dann müssen einige Rundungen angewendet werden, insbesondere wenn nur eine begrenzte Anzahl von Bits verwendet werden kann (was in der realen Computerwissenschaft immer der Fall ist).

Leider arbeitet der Windows-Rechner im Programmiermodus nur mit ganzzahligen Werten. Eine Problemumgehung, um Ihr Ziel zu erreichen, ist wie folgt:

  1. Geben Sie im Standardmodus eine Dezimalzahl (z. B. gebrochen) ein, die konvertiert werden soll, z 0.21

  2. Multipliziert es mit 2 (Schlüssel * 2 =)

  3. Wiederholen Sie Schritt 2 ( =immer und immer wieder die Taste), bis Sie eine Zahl erhalten, die ganzzahlig ist - oder ganz nahe an der Ganzzahl liegt (siehe Anmerkung unten).

    WICHTIG! Denken Sie daran, wie oft Sie den Anfangswert mit 2 multipliziert haben (in Schritt 2 und 3 wiederholt).

  4. Wechseln Sie in den Programmierermodus und geben Sie den nach Schritt 3 empfangenen Wert ein, der auf eine ganze Zahl gerundet wird (dies wird jedoch beim Wechsel des Modus nicht automatisch geschehen, zumindest in der Rechner-App von Windows 10).

  5. Die binäre Darstellung der Ganzzahl wird angezeigt. Stellen Sie sich vor, der Binärpunkt ist ganz rechts (nach der letzten Binärziffer). Bewegen Sie ihn dann um so viele Positionen nach links, wie Sie in Schritt 2 und 3 multipliziert haben. Fügen Sie ggf. führende Nullen hinzu.

Beispiel:

  • Originalwert: 0.21
  • Multiplizieren Sie es zehnmal mit 2 - Sie erhalten 215,04. Angenommen, es liegt nahe genug an einem ganzzahligen Wert (dies ist eine willkürliche Entscheidung!), Und Sie erhalten die gerundete ganze Zahl von215
  • Bei der Eingabe 215im Programmierermodus wird die binäre Darstellung angezeigt:11010111
  • Wenn Sie den binären Punkt um 10 Stellen nach links verschieben, erhalten Sie: .0011010111

Anmerkung: Wie ich bereits erwähnt habe, können nicht alle Dezimalbruchteile genau in binärer Form dargestellt werden. Daher müssen Sie manchmal entscheiden, welche Genauigkeit (Näherung) Ihren Anforderungen entspricht. In dem obigen Beispiel ging ich davon aus, dass die Rundung 215,04 auf 215 einen vergleichsweise kleinen "Fehler" (unter 1/5000) darstellt, sodass 10 Bits ausreichten, um die ursprüngliche Zahl darzustellen. Wenn ich größere Genauigkeit brauchte, würde ich die Multiplikation mit 2 nicht zehn, sondern vielleicht zwanzigmal machen (Ergebnis: als ganze Zahl 220200,96gerundet 220201) und eine 20-Bit-Binärdarstellung erhalten .00110101110000101001(mit "error" unter 1/5000000).

BTW Normalerweise zählt die Anzahl der Bits zur Darstellung von Daten in Computern eine Potenz von 2 - 8, 16, 32, 64, manchmal 48 usw. In einem solchen Fall können Sie einfach die schnellere Methode "Multiplikation mit 2" im Taschenrechner verwenden von Ihnen in Kommentar unten ( *(2^n)).

Sehr interessant .. ein paar Beobachtungen. A) Schritt 2 kann mit der Taste x ^ y auf dem Fensterrechner beschleunigt werden. im wissenschaftlichen Modus. zB 0.21 * 2 ^ 30 Der ganzzahlige Teil dieser Zahl kann dann im Windows-Rechner in eine Binärzahl umgewandelt werden. B) Wo du geschrieben hast, "multipliziere es 10 mal mit 2", denke ich, du meinst es, multipliziere es 10 mal, / 10 mal, multipliziere es mit 2, dh 2 ^ 10. barlop vor 6 Jahren 0
C) Interessanterweise lernte ich eine viel langsamere Methode als Ihre Methode. Die Methode, die ich gelernt habe, war jedes Mal, wenn Sie sie mit zwei multiplizieren. Wenn die Zahl <1 ist, schreiben Sie eine 0 in die Ergebniszeichenfolge. Wenn die Zahl> = 1 ist, subtrahieren Sie eins und schreiben eine 1 in Ihre Ergebniszeichenfolge. . barlop vor 6 Jahren 0
@barlop Anzeige. A) Ja, die Verwendung von x ^ y-Operationen ist viel schneller und ist nützlich, wenn Sie im Voraus wissen, wie viele Bits Sie für die binäre Darstellung verwenden (_y_ in der Formel). Anzeige. B) Entschuldigung für irreführende Ausdrücke - Englisch ist nicht die Sprache meiner Mütter :-) - bearbeitet, wie Sie es vorgeschlagen haben AnSi vor 6 Jahren 0
Netter Workaround, @AnSi nurchi vor 6 Jahren 0
Es ist nicht nötig, in den ersten Satz zu schreiben, dass die Brüche "CAN" binär dargestellt werden. Ich weiß, dass sie es können. Die einzige Person, die sagte, dass sie nicht kann, ist ein Kommentator "nurchi". Es wird jedoch angenommen, dass eine Antwort an die Person gerichtet ist, die die Frage gestellt hat - ich. Es ist also nicht notwendig, in Ihrem ersten Satz so deutlich etwas zu sagen, dass ich bereits zustimme. Dieser ganze erste Satz ist überflüssig. Ich habe in meiner Frage sogar "binärer Punkt" erwähnt, also bin ich mir dessen bewusst barlop vor 6 Jahren 0
Warum haben Sie Ihren ersten Satz gemacht? "Im Allgemeinen kann der Bruchwert in binärer Form dargestellt werden, indem eine Art" binärer Punkt "(Gegenstück zum Dezimalpunkt) verwendet wird. Niemand hat gesagt, dass dies nicht möglich ist. Und warum bringen Sie mir den Begriff "binärer Punkt" vor, als würde ich ihn nicht kennen, wenn ich ihn bereits kenne und in meiner Frage dargelegt habe? barlop vor 6 Jahren 0
1
nurchi

Die Darstellung der Bruchteile im Speicher entspricht somit dem IEEE-754-Standard für Fließkommazahlen.

Eine als Dezimalzahl 123 einfache Zahl, wenn sie als Gleitkommazahl (z. B. 123.0) gespeichert wird, wird tatsächlich als gespeichert 1.921875 * 2^6 = 1.921875 * 64

Stellen Sie sich dies als eine wissenschaftliche Notation vor a * 10^b, bei der a [1, 10) sein muss (Bedeutung von 1,0 bis 10, jedoch nicht einschließlich 10, z. B. 9,999 ... 8).

Ihre Nummer 0.21wird als 1.6799999475479126 * 2^(-3)gleichwertig gespeichert 0.20999999344348907470703125(Windows-Rechner zeigt dies an, 0.209999993443489075wenn Sie manuell berechnen)

Jeder Rechner, der diesen Standard verwendet, speichert Zahlen in demselben Format (wenn dies nicht der Fall ist, abgesehen von der Endianness-Methode, hat er wahrscheinlich eine andere Art, Fließkommazahlen zu speichern. Wenn Sie also Werte von einem Software- / Übersetzung muss passieren, aber dies ist ein völlig anderes Thema).

Nun, zur Beantwortung Ihrer Frage, während der Windows-Rechner die Zahlen in diesem Formular speichert, wurde er nicht dazu entwickelt, die Zwischen- / Rohwerte im Speicher anzuzeigen. Wenn Sie wirklich Lust haben, können Sie ein Tool zum Anzeigen von Speichern verwenden und die Werte ausspähen, wenn Sie sie in den Taschenrechner eingeben. Das ist jedoch ein anderes Thema.

Unter https://www.h-schmidt.net/FloatConverter/IEEE754.html finden Sie eine Vorstellung davon, wie die Gleitkommazahlen gespeichert und dargestellt werden.

Ich stelle fest, dass diese Website eine binäre Zeichenfolge dafür gibt, http://decimal-to-binary.com/decimal-to-binary-converter-online.html?id=2251 Aber es ist auch eine Näherung 'cos, deren Zeichenfolge 0,00110101110 ist 1/8 + 1/16 + 1/64 + 1/256 + 1/512 + 1/1024 = (128/1024 + 64/1024 + 16/1024 + 4/1024 + 2/1024 + 1/1024) = 215/2014 = 0.2099609375, was noch weniger genau ist als die Näherung, die Sie angegeben haben. barlop vor 6 Jahren 0