web-dev-qa-db-fra.com

Calculer les bits nécessaires pour stocker le nombre décimal

Ceci est une question de devoirs que je suis coincé avec.

Considérons une représentation entière non signée. Combien de bits seront nécessaire pour stocker un nombre décimal contenant:

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

Je sais que le nombre entier non signé sera compris entre 0 et 2 ^ n, mais je ne comprends pas comment le nombre de bits requis pour représenter un nombre en dépend. Sil te plait aide moi.

Merci d'avance.

16
Fahad Uddin

Eh bien, il vous suffit de calculer la plage pour chaque cas et de trouver la puissance la plus basse de 2 supérieure à cette plage.

Par exemple, dans i), 3 chiffres décimaux -> 10 ^ 3 = 1000 nombres possibles, vous devez donc trouver la puissance la plus basse de 2 supérieure à 1000, qui dans ce cas est 2 ^ 10 = 1024 (10 bits).

Edit: En gros, vous devez trouver le nombre de nombres possibles avec le nombre de chiffres que vous avez, puis le nombre de chiffres (dans l’autre base, dans ce cas la base 2, binaire) a au moins le même nombre possible nombres comme celui en décimal.

Pour calculer le nombre de possibilités en fonction du nombre de chiffres: possibilities=base^ndigits

Donc, si vous avez 3 chiffres en décimal (base 10), vous avez 10^3=1000 possibilités. Ensuite, vous devez trouver un nombre de chiffres en binaire (bits, base 2) pour que le nombre de possibilités soit d'au moins 1000, ce qui dans ce cas est 2^10=1024 (9 chiffres ne suffisent pas car 2^9=512 est inférieur à 1000).

Si vous généralisez cela, vous avez: 2^nbits=possibilities <=> nbits=log2(possibilities)

Ce qui s'applique à i) donne: log2(1000)=9.97 et puisque le nombre de bits doit être un entier, vous devez l'arrondir à 10.

24
guardianpt

La formule du nombre de bits binaires nécessaires pour stocker n nombres entiers (par exemple, 0 à n - 1 ) est la suivante:

bûchee(n)/loge(2)

et arrondir.

Par exemple, pour les valeurs -128 à 127 (octet signé) ou 0 à 255 (octet non signé), le nombre d'entiers est 256, donc n est 256, donnant 8 à partir de la formule ci-dessus.

Pour 0 à n , utilisez n + 1 dans la formule ci-dessus (il existe n + 1 nombres entiers).

Sur votre calculatrice, connectez-vouse peut simplement être étiqueté log ou ln (logarithme naturel).

6
rghome

Ok pour généraliser la technique du nombre de bits dont vous avez besoin pour représenter un nombre est fait de cette façon. Vous avez R symboles pour une représentation et vous voulez savoir combien de bits, résolvez cette équation R = 2 ^ n ou log2 (R) = n. Où n est le nombre de bits et R le nombre de symboles pour la représentation. 

Pour le système de nombres décimaux R = 9, nous résolvons donc 9 = 2 ^ n, la réponse est 3,17 bits par chiffre décimal. Ainsi, un nombre à 3 chiffres nécessitera 9,51 bits ou 10. Un nombre à 1000 chiffres nécessite 3170 bits

3
jk3

Le plus grand nombre pouvant être représenté par un n nombre en base b est bn - 1 . Par conséquent, le plus grand nombre pouvant être représenté dansNchiffres binaires est 2N - 1 . Nous avons besoin du plus petit entierNtel que:

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

Prendre le logarithme en base 2 des deux côtés de la dernière expression donne:

bûche2 2N ≥ log2 bn
⇒ N ≥ log2 bn
⇒ N ≥ log bn / log 2

Puisque nous voulons le plus petit entierNqui vérifie la dernière relation, trouverN, trouver log bn / log 2 et prenez le plafond.

Dans la dernière expression, n'importe quelle base convient aux logarithmes, tant que les deux bases sont identiques. Il est pratique ici, puisque nous nous intéressons au cas où b = 10 , d’utiliser des logarithmes en base 10 profitant de logdixdixn == n .

Pour n = 3 :

N = ⌈3/logdix 2⌉ = 10

Pour n = 4 :

N = ⌈4/logdix 2⌉ = 14

Pour n = 6 :

N = ⌈6/logdix 2⌉ = 20

Et en général, pour n chiffres décimaux:

N = ⌈n/logdix 2⌉

2
David Bowling

Continuez à diviser le nombre par 2 jusqu'à obtenir un quotient de 0.

1
Arun

laissez son n bit requis puis 2 ^ n = (base) ^ chiffre, puis prenez journal et comptez pas. pour n

0
Gate Aspirant

Celui-ci fonctionne!

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

Pour inclure des nombres négatifs, vous pouvez ajouter un bit supplémentaire pour spécifier le signe.

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

Pour un nombre binaire de n chiffres, la valeur décimale maximale qu’elle peut contenir sera

2 ^ n - 1 et 2 ^ n sont les permutations totales pouvant être générées à l'aide de ces nombreux chiffres.

Dans un cas où vous ne voulez que trois chiffres, c’est-à-dire votre cas 1. Nous voyons que les exigences sont,

2 ^ n - 1> = 999

L'application du journal des deux côtés,

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

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

n = 9,964 (environ).

En prenant la valeur maximale de n puisque 9.964 ne peut pas être un nombre valide de chiffres, nous obtenons n = 10.

0
Prathik Rajendran M

Il y a beaucoup de réponses ici, mais je vais ajouter mon approche car j'ai trouvé ce post tout en travaillant sur le même problème.

En commençant par ce que nous savons, voici le nombre de 0 à 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

en regardant les pauses, il montre ce tableau

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

Alors, maintenant, comment calculons-nous le motif?

Rappelez-vous que log base 2 (n) = log base 10 (n)/log base 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

Maintenant, le résultat souhaité correspondant à la première table. Notez que certaines valeurs sont des cas particuliers. 0 et tout nombre égal à 2. Ces valeurs ne changent pas lorsque vous appliquez un plafond. Vous devez donc ajouter 1 pour obtenir La longueur minimale du champ de bits. 

Pour prendre en compte les cas spéciaux, ajoutez un à l’entrée. Le code résultant implémenté en python est:

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

En supposant que la question demande quels sont les bits minimum requis pour stocker 

  1. Numéro à 3 chiffres

Mon approche de cette question serait: 

  • quel est le nombre maximum de 3 chiffres que nous devons stocker? Ans: 999
  • quelle est la quantité minimale de bits requise pour stocker ce nombre?

Ce problème peut être résolu de cette façon en divisant 999 par 2 de manière récursive. Cependant, il est plus simple d'utiliser le pouvoir des mathématiques pour nous aider. Essentiellement, nous résolvons n pour l'équation ci-dessous:

2^n = 999
nlog2 = log999
n ~ 10

Vous aurez besoin de 10 bits pour stocker un nombre à 3 chiffres. 

Utilisez une approche similaire pour résoudre les autres sous-questions!

J'espère que cela t'aides!

0
Arial

La réponse la plus simple serait de convertir les valeurs requises en binaires et de voir combien de bits sont requis pour cette valeur. Cependant, la question demande combien de bits pour un nombre décimal de X chiffres. Dans ce cas, il semble que vous deviez choisir la valeur la plus élevée avec X chiffres, puis convertir ce nombre en binaire. 

Comme exemple de base, supposons que nous voulions stocker un numéro de base 10 sur 1 chiffre et savoir combien de bits cela nécessiterait. Le plus grand numéro de base dix chiffres est 9, nous devons donc le convertir en binaire. Cela donne 1001, qui a un total de 4 bits. Ce même exemple peut être appliqué à un nombre à deux chiffres (la valeur maximale étant 99, qui est convertie en 1100011). Pour résoudre n chiffres, vous devez probablement résoudre les autres et rechercher un motif.

Pour convertir des valeurs en valeurs binaires, vous divisez de manière répétée par deux jusqu'à obtenir un quotient de 0 (et tous vos restants seront égaux à 0 ou 1). Vous inversez ensuite les ordres de vos restes pour obtenir le nombre en binaire. 

Exemple: 13 à binaire.

  • 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))

J'espère que cela aide.

0
Cooper