2016-11-24 6 views
0

I lernen, dass, um eine Zahl n ist zu repräsentieren die Anzahl der Bits zu bestimmen, benötigt durch den Logarithmus von n nimmt, d.h. log(n) (Basis 2). Ich bin jedoch nicht überzeugt! Sieh dir mein Beispiel an:die Anzahl der Bits wissen, um eine Zahl zu repräsentieren

wenn n=4, dann brauche ich log4 = 2 bits um 4 darzustellen, aber 4 ist (100) in binär, was eindeutig 3 Bits ist !!

Kann jemand erklären warum? Danke.

+0

downvote! Stimmt irgendetwas nicht? Es tut mir leid im Voraus – Kris

+1

Ja, ich kann es erklären! Was du gelernt hast, ist * falsch *. Verlernen Sie es jetzt. Mit 'k' Bits können Sie Zahlen von' 0' bis '2^k-1' darstellen. Leider liegt '2^k' außerhalb dieses Bereichs. Vielleicht möchten Sie lernen, dass Sie genau 'log (n)' Bits benötigen, um jede natürliche Zahl * kleiner als 'n' * darzustellen. Um 'n' zu enthalten, * brauchen * Sie möglicherweise ein anderes Bit. –

+0

@ n.m. Vielen Dank. Sehr klar jetzt. Schätzen Sie es – Kris

Antwort

1

Sind Sie sicher, dass Sie nicht über n-Bit-Anordnungen sprechen?

Mit 2 Bits Sie haben 4 verschiedene Sequenzen:

00 
01 
10 
11 

Die Zahl 4 ist effektiv 100 binär, aber ich bin Verdacht besteht, dass Sie diese Konzepte gemischt.

+0

Vielen Dank für Ihre Antwort. Nein, ich spreche nicht von Arrangements, weil ich weiß, dass ich dafür n Faktor brauche. Ich habe gerade aus Youtube-Lektion gelernt, dass (um die Anzahl der Bits zu bestimmen, die benötigt werden, um eine Zahl n darzustellen, indem der Logarithmus genommen wird), also versuche ich mich selbst zu überzeugen! Ich denke, ich mische hier etwas. Danke – Kris

+1

Wie @ n.m. Ihre Frage kommentiert, _ versuche nicht, dich selbst zu überzeugen, da das nicht stimmt. 'log (n)' wird Ihnen entweder, wie gesagt, die Anzahl der Bit-Anordnungen oder wie n.m. Erwähnt, die Anzahl der Bits, die ganze Zahlen kleiner als "n" darstellen. – Mat

+0

Danke Mat für die Klarstellung. – Kris

1

Zum direktesten Schema nehmen Sie ceil(log2(N+1)) mit log2, ausgedrückt als Floating. Im reinen Integral wäre ein naives Schema, die Zahl durch 2 zu teilen (integral div, also trunc), bis man ein Ergebnis von Null erhält (zB 4/2 = 2, 2/2 = 1, 1/2) = 0 - drei Divisionen, um auf Null zu gehen, daher werden 3 Bits benötigt).

Weitere advanced schemes exist, aber gehen dieser Pfad kann Ihnen Leistung schaden - moderne CPU-es haben instructions zu erkennen, die Position der msb auf 1 für eine Zahl, Anweisungen, die sehr wenige CPU-Zyklen erfordern.

+0

Eigentlich ist es 'ceil (log2 (N + 1))', da hat OP es falsch verstanden. – biziclop

+0

Korrigiert, danke –

Verwandte Themen