webentwicklung-frage-antwort-db.com.de

Berechnung der Bits, die zum Speichern der Dezimalzahl erforderlich sind

Dies ist eine Hausaufgabenfrage, mit der ich mich beschäftige.

Betrachten Sie die vorzeichenlose Ganzzahldarstellung. Wie viele Bits werden erforderlich, um eine Dezimalzahl zu speichern, die Folgendes enthält:

i) 3 digits ii) 4 digits iii) 6 digits iv) n digits

Ich weiß, dass der Bereich der vorzeichenlosen Ganzzahl 0 bis 2 ^ n sein wird, aber ich weiß nicht, wie die Anzahl der zur Darstellung einer Zahl erforderlichen Bits davon abhängt. Bitte hilf mir.

Danke im Voraus.

16
Fahad Uddin

Nun, Sie müssen nur den Bereich für jeden Fall berechnen und die niedrigste Leistung von 2 ermitteln, die höher ist als dieser Bereich.

Zum Beispiel sind in i) 3 Dezimalstellen -> 10 ^ 3 = 1000 mögliche Zahlen, so dass Sie die niedrigste Potenz von 2 finden müssen, die höher als 1000 ist, in diesem Fall 2 ^ 10 = 1024 (10 Bit).

Edit: Grundsätzlich musst du die Anzahl der möglichen Zahlen mit der Anzahl der Ziffern, die du hast, finden und dann herausfinden, welche Anzahl von Ziffern (in der anderen Basis, in diesem Fall Basis 2, binär) mindestens das gleiche Ergebnis hat Zahlen als Dezimalzahl.

Um die Anzahl der Möglichkeiten mit der Anzahl der Ziffern zu berechnen: possibilities=base^ndigits

Wenn Sie also 3 Dezimalstellen (Basis 10) haben, haben Sie 10^3=1000-Möglichkeiten. Dann müssen Sie eine binäre Anzahl von Ziffern (Bits, Basis 2) finden, so dass die Anzahl der Möglichkeiten mindestens 1000 ist. Dies ist in diesem Fall 2^10=1024 (9 Ziffern reichen nicht aus, da 2^9=512 weniger als 1000 ist).

Wenn Sie dies verallgemeinern, haben Sie: 2^nbits=possibilities <=> nbits=log2(possibilities)

Was für i) gilt: log2(1000)=9.97 und da die Anzahl der Bits eine ganze Zahl sein muss, müssen Sie sie auf 10 runden.

24
guardianpt

Die Formel für die Anzahl der binären Bits, die zum Speichern von n Ganzzahlen (zum Beispiel 0 in n - 1 ) erforderlich sind, lautet:

loge(n)/loge(2)

und aufrunden.

Für Werte von -128 bis 127 (Byte mit Vorzeichen) oder 0 bis 255 (Byte ohne Vorzeichen) ist die Anzahl der Ganzzahlen 256, also ist n 256, was 8 aus der obigen Formel ergibt.

Für 0 bis n verwenden Sie n + 1 in der obigen Formel (es gibt n + 1 Ganzzahlen).

Auf Ihrem Rechner, loge darf nur als log oder ln (natürlicher Logarithmus) bezeichnet werden.

6
rghome

Um die Technik zu verallgemeinern, wie viele Bits Sie zur Darstellung einer Zahl benötigen, wird auf diese Weise vorgegangen. Sie haben R-Symbole für eine Darstellung, und Sie möchten wissen, wie viele Bits diese Gleichung R = 2 ^ n oder log2 (R) = n lösen. Dabei ist n die Anzahl der Bits und R die Anzahl der Symbole für die Darstellung. 

Für das Dezimalsystem R = 9 lösen wir 9 = 2 ^ n. Die Antwort lautet 3,17 Bits pro Dezimalstelle. Daher benötigt eine dreistellige Zahl 9,51 Bits oder 10. Eine 1000-stellige Zahl benötigt 3170 Bits

3
jk3

Die größte Zahl, die durch eine n Ziffernnummer in der Basis b dargestellt werden kann, ist bn - 1. Daher ist die größte Zahl, die in N binären Ziffern dargestellt werden kann, 2)N - 1. Wir brauchen die kleinste ganze Zahl N, so dass:

2N - 1 ≥ bn - 1
⇒ 2N ≥ bn

Wenn Sie den Logarithmus der Basis 2 auf beiden Seiten des letzten Ausdrucks nehmen, erhalten Sie:

log2 2N ≥ log2 bn
⇒ N ≥ log2 bn
⇒ N ≥ log bn / log 2

Da die kleinste Ganzzahl N, die die letzte Beziehung erfüllt, gewünscht wird, finden Sie N und log bn / log 2 und nimm die Decke.

Im letzten Ausdruck ist jede Basis für die Logarithmen geeignet, solange beide Basen gleich sind. Es ist hier bequem, da wir uns für den Fall interessieren, in dem b = 10, Logarithmen der Basis 10 zu verwenden, wobei log1010n == n.

Für n = 3:

N = ⌈3/log10 2⌉ = 10

Für n = 4:

N = ⌈4/log10 = 14

Für n = 6:

N = ~ 6/log10 2⌉ = 20

Und im Allgemeinen für n Dezimalstellen:

N = ⌈n/log10 2⌉

2
David Bowling

Teilen Sie die Zahl weiter durch 2, bis Sie einen Quotienten von 0 erhalten.

1
Arun

lass sein erforderliches n bit dann 2 ^ n = (base) ^ digit und dann log und count no zählen. für n

0
Gate Aspirant

Das funktioniert!

floor(loge(n) / loge(2)) + 1

Um negative Zahlen einzufügen, können Sie ein zusätzliches Bit hinzufügen, um das Vorzeichen anzugeben.

floor(loge(abs(n)) / loge(2)) + 2
0
Thiagesh thg

Die kurze Antwort lautet:

int nBits = ceil(log2(N));

Das liegt einfach daran, dass pow (2, nBits) etwas größer ist als N.

0
Alex Tuduran

Für eine binäre Anzahl von n Ziffern ist der maximale Dezimalwert zulässig

2 ^ n - 1 und 2 ^ n sind die gesamten Permutationen, die mit diesen vielen Ziffern generiert werden können.

Nehmen Sie einen Fall, in dem Sie nur drei Ziffern haben möchten, dh Ihren Fall 1. Wir sehen, dass die Anforderungen lauten,

2 ^ n - 1> = 999

Protokoll auf beiden Seiten anwenden,

log (2 ^ n - 1)> = log (999)

log (2 ^ n) - log (1)> = log (999)

n = 9,964 (ungefähr).

Wenn der Höchstwert von n seit 9.964 angenommen wird, kann dies keine gültige Anzahl von Ziffern sein, wir erhalten n = 10.

0

Hier gibt es viele Antworten, aber ich werde meinen Ansatz hinzufügen, da ich diesen Beitrag gefunden habe, während ich an demselben Problem arbeitete.

Beginnend mit dem, was wir hier kennen, sind die Zahlen von 0 bis 16.

Number           encoded in bits         minimum number of bits to encode
0                000000                  1
1                000001                  1
2                000010                  2
3                000011                  2
4                000100                  3
5                000101                  3
6                000110                  3
7                000111                  3
8                001000                  4
9                001001                  4
10               001010                  4
11               001011                  4
12               001100                  4
13               001101                  4
14               001110                  4
15               001111                  4
16               010000                  5

wenn man die Pausen betrachtet, zeigt es diese Tabelle

number <=       number of bits
1               0
3               2
7               3
15              4

Wie berechnen wir nun das Muster?

Denken Sie daran, dass Protokollbasis 2 (n) = Protokollbasis 10 (n)/Protokollbasis 10 (2)

number    logb10 (n)   logb2 (n)   ceil[logb2(n)] 
1         0            0           0           (special case)
3         0.477        1.58        2
7         0.845        2.807       3  
8         0.903        3           3           (special case)
15        1.176        3.91        4
16        1.204        4           4           (special case)
31        1.491        4.95        5
63        1.799        5.98        6

Nun entspricht das gewünschte Ergebnis der ersten Tabelle. Beachten Sie, dass auch einige Werte Sonderfälle sind. 0 und jede Zahl, die eine Potenz von 2 ist. Diese Werte ändern sich nicht, wenn Sie die Obergrenze anwenden. Sie wissen also, dass Sie 1 hinzufügen müssen, um

Um die Sonderfälle zu berücksichtigen, fügen Sie der Eingabe einen hinzu. Der resultierende Code, der in Python implementiert wird, lautet:

from math import log
from math import ceil
def min_num_bits_to_encode_number(a_number):
    a_number=a_number+1  # adjust by 1 for special cases

    # log of zero is undefined
    if 0==a_number:
        return 0
    num_bits = int(ceil(log(a_number,2)))  # logbase2 is available
    return (num_bits)
0
netskink

Angenommen, die Frage fragt, was für ein Minimum für die Speicherung erforderlich ist 

  1. 3-stellige Nummer

Meine Herangehensweise an diese Frage wäre: 

  • was ist die maximale Anzahl von 3 Ziffern, die wir speichern müssen? Ans: 999
  • was ist die minimale Anzahl von Bits, die ich zum Speichern dieser Anzahl benötige?

Dieses Problem kann auf diese Weise gelöst werden, indem 999 durch 2 rekursiv dividiert wird. Es ist jedoch einfacher, die Mathematik einzusetzen, um uns zu helfen. Im Wesentlichen lösen wir n für die folgende Gleichung:

2^n = 999
nlog2 = log999
n ~ 10

Sie benötigen 10 Bits, um eine dreistellige Nummer zu speichern. 

Verwenden Sie einen ähnlichen Ansatz, um die anderen Unterfragen zu lösen!

Hoffe das hilft!

0
Arial

Die einfachste Antwort wäre, die erforderlichen Werte in binär umzuwandeln und zu sehen, wie viele Bits für diesen Wert erforderlich sind. Die Frage stellt jedoch die Anzahl der Bits für eine Dezimalzahl von X-Ziffern. In diesem Fall scheint es, als müssten Sie den höchsten Wert mit X-Ziffern auswählen und diese Zahl dann in eine Binärzahl konvertieren. 

Angenommen, wir wollten eine 1-stellige Basis-10-Nummer speichern und wissen, wie viele Bits erforderlich sind. Die größte 1-stellige Basisnummer ist 9, daher müssen wir sie in binär konvertieren. Dies ergibt 1001 mit insgesamt 4 Bits. Dasselbe Beispiel kann auf eine zweistellige Zahl angewendet werden (wobei der Maximalwert 99 ist und der Wert in 1100011 umgewandelt wird). Um nach n Ziffern aufzulösen, müssen Sie wahrscheinlich die anderen auflösen und nach einem Muster suchen.

Um Werte in binäre Werte zu konvertieren, dividieren Sie wiederholt durch zwei, bis Sie einen Quotienten von 0 erhalten (und alle Ihre Reste werden 0 oder 1 sein). Sie kehren dann die Reihenfolge Ihrer Reste um, um die Zahl binär zu erhalten. 

Beispiel: 13 zu binär.

  • 13/2 = 6 r 1
  • 6/2 = 3 r 0
  • 3/2 = 1 r 1
  • 1/2 = 0 r 1
  • = 1101 ((8 * 1) + (4 * 1) + (2 * 0) + (1 * 1))

Hoffe das hilft aus.

0
Cooper