2016-05-02 9 views
-6

Ich habe versucht, 23 in binären zu konvertieren und kam durch die Verwendung the following process mit der Nummer 100111 up:Warum ist 23 gleich 10111 in binär?

1) 23 = 22 + 1 // find out the least significant bit 1 
2) 22/2 = 10 + 1 // next bit is 1 
3) 10/2 = 4 + 1 // next bit is 1 
4) 4/2 = 2 + 0 // next bit is 0 

Also mit den 2 in dezimal Ich bin links, die 10 in binär ist. Jetzt bin Aufschreiben ich die Nummer:

10 plus die Bits aus den Operationen 4, 3, 2, 1 gibt mir 100111 jedoch ist die Antwort 10111. Wo ist mein Fehler?

+2

Es klingt nicht wie eine Programmierfrage. –

+0

Zuletzt habe ich überprüft, '10/2 = 5' ... –

+7

Dies ist eine wirklich bizarre Art, binär zu zählen ... – ndugger

Antwort

1

Ausgerüstet mit this method, die binäre Darstellung der Dezimalzahl 23 ist wie folgt:

ex: Convert 23 to a binary representation 

23/2 = 11 R 1 
11/2 = 5 R 1 
5/2 = 2 R 1 
2/2 = 1 R 0 
1/2 = 0 R 1 

answer = 10111 

Wie Sie es derzeit haben,

1) 23 = 22 + 1 // das niedrigstwertige Bit 1

unnötig herausfinden Dieser Schritt ist. Sie müssen nicht zuerst die ungerade Zahl abrasieren. Befolgen Sie einfach die Prozedur, die in der Verknüpfung beschrieben wird, um die Ausgabe zu generieren. Das bedeutet, dass die einzige Operation, die Sie an Ihrer Dezimalzahlausgabe ausführen, wiederholte Unterteilungen von 2 ist, wobei die Reste Ihre binäre Darstellung Ihrer Nummer darstellen.


Wenn dies keine Programmierfrage ist, sollte sie in das richtige Forum migriert werden.

Wenn Sie auch eine JavaScript-Lösung tun wollen, da Sie diese Frage mit dem Tag JavaScript markiert haben, dann ist der einfachste Weg, einfach (N).toString(2) tun, wo (N) Ihre Dezimalzahl ist und .toString(2) konvertiert Ihre Zahl in eine binäre Darstellung Ihrer Nummer in String-Form. Die 2 repräsentiert die Radix/Base.

+0

danke, aber _This step is not correct._ ist korrekt), denn ich stelle hier einfach 23 als '(x (n) * 2^n + ... + x (1) * 2^(1)) + 1 * 2^0', wobei der Teil '(x (n) * 2^n + ... + x (1) * 2^(1))' 22 darstellt. Dann teile ich dies Teil um 2, um einen anderen Koeffizienten nahe dem 2^0 zu erhalten. –

+0

Das ist in Ordnung, aber Sie müssen verstehen, dass die abrasierte "1" wieder in das Endergebnis aufgenommen werden muss. Dem Beispiel in der Verknüpfung folgend, bedeutet es '10110' +' 00001', was '10111' ist. – timolawl

+0

Bitte sehen Sie meine [diese Antwort] (http://math.stackexchange.com/a/1769870/333066) auf die Frage –

1

Am Ende, was Sie bekommen, ist

23 = 16 + 4 + 2 + 1 
    = 1*16 + 0*8 + 1*4 + 1*2 + 1*1 
    = 1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 1*2^0 

Die Berechnungen sollte wie folgt aussehen:

23 = 2*11 + 1 (1st least significant digit is 1) 
11 = 2*5 + 1 (2nd least significant digit is 1) 
5 = 2*2 + 1 (3rd least significant digit is 1) 
2 = 2*1 + 0 (4th least significant digit is 0) 
1 = 2*0 + 1 (5th least significant digit is 1) 
+0

thansk, ich benutze dies den Algorithmus erklärt [hier] (http://math.stackexchange.com/a/86211/333066). Können Sie bitte erläutern, wie Ihre Berechnungen mit diesem Algorithmus übereinstimmen? –

+0

Die Grundidee von dem, was ich tue ist, dass die Basis-b Darstellung von 'N' gleich der Basis-b Darstellung von' N/b' ist, gefolgt von einer letzten Ziffer, die 'N% b' – hugomg

+0

danke, basierend auf meiner [this] (http://math.stackexchange.com/a/1769870/333066) Erkundung ist der fünfte Schritt unnötig, da wir zwei Bits '1' und' 0' von diesem Ausdruck '2 * 1 nehmen können + 0'. –