Combien de bits avez-vous besoin de stocker un entier positif?
Combien de bits auriez-vous besoin pour stocker un entier positif, par exemple dans la des milliards? Auriez-vous d'utiliser le log2 N pour le savoir?
Comme un entier ou à virgule flottante et avec quelle précision?
Signé ou non signé? C'est, sont des entiers négatifs possible, ou êtes-vous intéressé à représenter uniquement des entiers non négatifs? (Je le prends le à votre question de contexte, de parler de nombres entiers, pas des nombres à virgule flottante.)
Oui je vous parle des entiers positifs. Alors serait-il le log2 N?
Signé ou non signé? C'est, sont des entiers négatifs possible, ou êtes-vous intéressé à représenter uniquement des entiers non négatifs? (Je le prends le à votre question de contexte, de parler de nombres entiers, pas des nombres à virgule flottante.)
Oui je vous parle des entiers positifs. Alors serait-il le log2 N?
OriginalL'auteur user1647008 | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
Depuis que j'ai vu la réponse signalé correctement tant de fois, je pensais que j'allais poster la bonne réponse.
Le nombre de bits nécessaires pour représenter l'entier positif n est
où log2 signifie logarithme de base 2.
n = 18446744073709551615
(égal àn = pow(2, 8 * sizeof(unsigned long))
sur unx86_64
encadré), carlog2(n) = 64
dans ce cas et+ 1
est excessif. Existe-il des inconvénients à l'aide debits = ceil(log2(n))
à la place?@Selurvedu points, en dépit de réclamer l'exactitude, cette réponse est fausse si n est une puissance de 2. Utilisation ceil(log2(n)) à la place.
De quoi parles-tu et pourquoi des gens comme vos commentaires?
Math.log2(16).ceil
est égal à4
, mais nous avons besoin de5
, doncMath.log2(16).floor + 1
est droit.Math.log2((1 << 64) - 1)
est égal à64
en raison de l'insuffisance de précision.OriginalL'auteur bradwilder31415
Oui. le nombre maximal stockées dans k bits est de 2^k-1, puisqu'il est de 2^k options pour les bits, et l'un d'eux est égal à zéro.
Par conséquent, le nombre de bits requis pour stocker un nombre N est log2(N), mais depuis il n'y a pas de demi bits, vous avez besoin afin de l'arrondir à l'cloest entier ci-dessus.
Remarque: si vous avez besoin d'inclure des nombres négatifs, il doit y avoir un bit pour le signe.
OriginalL'auteur LeeNeverGup
Juste pour ajouter à la réponse précédente, vous pouvez déterminer le nombre de bits nécessaires pour représenter un nombre
N
mathématiquement à l'aide de n'importe quel journal de la base. Par exemple, disons que je veux savoir combien de bits sont nécessaires pour représenter le nombre 12345 mais mon calculateur ne saitln
(logarithme naturel).Donc,
Prendre le
ln
des deux côtés.Bien sûr, le journal d'un nombre à un exposant, c'est que l'exposant fois le journal de seulement la base, Donc,
Diviser les deux côtés par ln(2),
Et bien sûr, comme il est indiqué dans l'autre réponse, vous devrez au long de ce résultat car, afin de représenter un nombre, vous avez besoin de 2^b soit égale ou supérieure à ce nombre.
Donc,
Où
ceil(f)
toursf
jusqu'à l'entier le plus proche.À l'aide de la procédure ci-dessus, vous pouvez trouver le nombre de bits nécessaires pour n'importe quel nombre
N
, à l'aide de n'importe quel journal de la base delogb
, c'est à dire,OriginalL'auteur mjgpy3