representarse representar que pueden podemos para número numeros numero necesitan necesarios hasta estados cuantos contar con carácter binario decimal unsigned unsigned-integer

representar - Cálculo de bits necesarios para almacenar el número decimal



el número de bits necesarios para representar un carácter (11)

Esta es una pregunta de tarea con la que estoy atascado.

Considere la representación de enteros sin signo. Cuántos bits se necesitarán para almacenar un número decimal que contenga:

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

Sé que el rango del entero sin signo será de 0 a 2 ^ n, pero no entiendo de qué manera depende el número de bits necesarios para representar un número. Por favor, ayúdame.

Gracias por adelantado.


¡Este funciona!

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

Para incluir números negativos, puede agregar un bit adicional para especificar el signo.

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


Aquí hay muchas respuestas, pero agregaré mi enfoque ya que encontré esta publicación mientras trabajaba en el mismo problema.

Comenzando con lo que sabemos aquí está el número del 0 al 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

Mirando las pausas, muestra esta tabla.

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

Entonces, ahora, ¿cómo calculamos el patrón?

Recuerde 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

Ahora el resultado deseado coincide con la primera tabla. Observe cómo también algunos valores son casos especiales. 0 y cualquier número que sea una potencia de 2. Estos valores no cambian cuando aplica el techo, por lo que sabe que necesita agregar 1 para obtener la longitud mínima del campo de bits.

Para tener en cuenta los casos especiales, agregue uno a la entrada. El código resultante implementado en python es:

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)


Bueno, solo tienes que calcular el rango para cada caso y encontrar la potencia más baja de 2 que sea mayor que ese rango.

Por ejemplo, en i), 3 dígitos decimales -> 10 ^ 3 = 1000 números posibles, por lo que debe encontrar la potencia más baja de 2 que sea mayor que 1000, que en este caso es 2 ^ 10 = 1024 (10 bits).

Edición: Básicamente, debe encontrar el número de números posibles con el número de dígitos que tiene y luego encontrar qué número de dígitos (en la otra base, en este caso base 2, binario) tiene al menos los mismos números posibles que el que tiene. en decimal

Para calcular el número de posibilidades dado el número de dígitos: possibilities=base^ndigits

Entonces, si tienes 3 dígitos en decimal (base 10) tienes 10^3=1000 posibilidades. Luego tienes que encontrar un número de dígitos en binario (bits, base 2) para que el número de posibilidades sea al menos 1000, que en este caso es 2^10=1024 (9 dígitos no es suficiente porque 2^9=512 que es menos de 1000).

Si generalizas esto, tienes: 2^nbits=possibilities <=> nbits=log2(possibilities)

Lo que se aplica a i) da: log2(1000)=9.97 y como el número de bits tiene que ser un número entero, debe redondearlo hasta 10.


Continúa dividiendo el número entre 2 hasta que obtengas un cociente de 0.


El número más grande que puede representarse por un número de n dígitos en la base b es b n - 1 . Por lo tanto, el número más grande que se puede representar en N dígitos binarios es 2 N - 1 . Necesitamos el entero N más pequeño tal que:

2 N - 1 ≥ b n - 1
⇒ 2 N ≥ b n

Tomando el logaritmo base 2 de ambos lados de la última expresión da:

log 2 2 N ≥ log 2 b n
⇒ N ≥ log 2 b n
⇒ N ≥ log b n / log 2

Como queremos que el entero N más pequeño que satisfaga la última relación, para encontrar N , encuentre log b n / log 2 y tome el techo.

En la última expresión, cualquier base está bien para los logaritmos, siempre y cuando ambas bases sean iguales. Es conveniente aquí, ya que estamos interesados ​​en el caso donde b = 10 , usar logaritmos de base 10 aprovechando el registro 10 10 n == n .

Para n = 3 :

N = ⌈3 / log 10 2⌉ = 10

Para n = 4 :

N = ⌈4 / log 10 2⌉ = 14

Para n = 6 :

N = ⌈6 / log 10 2⌉ = 20

Y en general, para n dígitos decimales:

N = ⌈n / log 10 2⌉


La fórmula para el número de bits binarios necesarios para almacenar n enteros (por ejemplo, de 0 a n - 1 ) es:

log e (n) / log e (2)

y redondear hacia arriba.

Por ejemplo, para los valores -128 a 127 (byte con signo) o de 0 a 255 (byte sin signo), el número de enteros es 256, por lo que n es 256, lo que da 8 de la fórmula anterior.

Para 0 a n , use n + 1 en la fórmula anterior (hay n + 1 enteros).

En su calculadora, log e puede ser etiquetado log o ln (logaritmo natural).


La respuesta más simple sería convertir los valores requeridos a binarios y ver cuántos bits se requieren para ese valor. Sin embargo, la pregunta pregunta cuántos bits para un número decimal de X dígitos. En este caso, parece que tiene que elegir el valor más alto con X dígitos y luego convertir ese número a binario.

Como ejemplo básico, supongamos que queremos almacenar un número de diez dígitos en la base de 1 dígito, y queremos saber cuántos bits requerirán. El número más grande de diez dígitos de la base es de 9, por lo que necesitamos convertirlo a binario. Esto produce 1001, que tiene un total de 4 bits. Este mismo ejemplo se puede aplicar a un número de dos dígitos (con un valor máximo de 99, que se convierte en 1100011). Para resolver n dígitos, probablemente necesite resolver los otros y buscar un patrón.

Para convertir los valores a binarios, se divide repetidamente por dos hasta que obtiene un cociente de 0 (y todos sus restos serán 0 o 1). A continuación, invierte las órdenes de los residuos para obtener el número en binario.

Ejemplo: 13 a binario.

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

Espero que esto ayude.


Ok, para generalizar la técnica de cuántos bits necesitas para representar un número, así se hace. Tiene R símbolos para una representación y desea saber cuántos bits, resuelva esta ecuación R = 2 ^ n o log2 (R) = n. Donde n es el número de bits y R es el número de símbolos para la representación.

Para el sistema numérico decimal R = 9, por lo que resolvemos 9 = 2 ^ n, la respuesta es 3.17 bits por dígito decimal. Por lo tanto, un número de 3 dígitos necesitará 9.51 bits o 10. Un número de 1000 dígitos necesita 3170 bits


Para un número binario de n dígitos, el valor decimal máximo que puede contener será

2 ^ n - 1, y 2 ^ n son las permutaciones totales que pueden generarse usando estos muchos dígitos.

Tomando un caso en el que solo desea tres dígitos, es decir, su caso 1. Vemos que los requisitos son,

2 ^ n - 1> = 999

Aplicando log a ambos lados,

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

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

n = 9.964 (aprox).

Tomando el valor de ceil de n desde 9.964 no puede ser un número válido de dígitos, obtenemos n = 10.


Suponiendo que la pregunta es ¿cuáles son los bits mínimos requeridos para que usted almacene?

  1. Número de 3 dígitos

Mi enfoque a esta pregunta sería:

  • ¿Cuál es el número máximo de 3 dígitos que necesitamos almacenar? Respuesta: 999
  • ¿Cuál es la cantidad mínima de bits necesarios para que almacene este número?

Este problema se puede resolver de esta manera dividiendo 999 por 2 de forma recursiva. Sin embargo, es más sencillo utilizar el poder de las matemáticas para ayudarnos. Esencialmente, estamos resolviendo n para la siguiente ecuación:

2^n = 999 nlog2 = log999 n ~ 10

Necesitarás 10 bits para almacenar un número de 3 dígitos.

Utilice un enfoque similar para resolver las otras subpreguntas!

¡Espero que esto ayude!


deje su n bit requerido y luego 2 ^ n = (base) ^ dígito y luego tome el registro y cuente no. para n