¿Por qué es 2 ^ 16 un número “especial”? [cerrado]

47

De acuerdo, me siento estupido al preguntar esto, pero en el artículo de Jeff: Obtención de la pantalla del teléfono de la entrevista a la derecha y se estableció originalmente en los 5 teléfonos esenciales preguntas de la pantalla :

  

No deberían mirarte fijamente   Cuando lo pidas con 2 ^ 16 es. Es un   numero especial Ellos deberían saberlo.

He sido un desarrollador \ software ingeniero \ code monkey \ lo que sea por un tiempo ahora, y creo que nunca me he encontrado con esto. Quiero decir, ciertamente puedo contar valores binarios haciendo operaciones básicas en ellos, etc., etc. Pero no veo qué tiene de "especial" este valor.

    
pregunta javamonkey79 01.02.2011 - 18:46

3 respuestas

76

(2 16 - 1) o 65535 o 0xFFFF o "64k" es el valor máximo de 2 bytes. Durante mucho tiempo, las CPU utilizaron arquitectura de 16 bits y los sistemas operativos también se basaron en operaciones de 16 bits y "words" . Había comandos de 16 bits y direcciones de memoria de 16 bits. Muchos sistemas / compiladores todavía usan 16 bits para enteros.

Por lo tanto, (2 16 - 1) es especial porque es el número más grande que puede contener un entero de 16 bits (sin signo) y la dirección de memoria más grande a la que puede acceder una arquitectura de 16 bits .

    
respondido por el Travis Christian 01.02.2011 - 18:51
58

De todo el cuerpo del artículo de Steve Yegge,

  

Los candidatos deben saber qué bits y bytes son. Deberían poder contar en binario; p.ej. deberían poder decirte qué es 2 ^ 5 o 2 ^ 10, en decimal. No deberían mirarte fijamente cuando le preguntas con 2 ^ 16 es. Es un número especial. Ellos deberían saberlo.

Me despidió de lo que citaste en la pregunta; parecía que un candidato debería poder describir su significado, pero en el contexto dice que los candidatos deben saber, desde el principio, qué es la conversión decimal de 2 16 . / strong>

El significado de esto es que dado que los humanos aún usamos el decimal para contar, especialmente en nuestras cabezas (en la mayoría de las circunstancias), necesitamos conocer las capacidades aproximadas de los bloques de bytes comunes que usamos Para almacenamiento, memoria, o incluso codificación de caracteres. Como un byte es de 8 bits, los más comunes son 8, 16, 24, 32 y 64.

En este momento, diría que 2 32 es la capacidad más común con la que se enfrenta un desarrollador. Sospecho de los desarrolladores que no saben que 2 32 es aproximadamente 4 billones (valor máximo de ~ 2 billones si está firmado), ya que significa que nunca se molestaron en averiguar aproximadamente cuántos registros se pueden almacenar en sus bases de datos que usan 32 bits int s para las claves primarias, o cuando el código antiguo que usa 32 bits int s para ID, fechas, etc., deberá volver a configurarse a 64 bits. 1

2 16 es la capacidad total de Java short . (Total de números entre -2 15 y 2 15 -1)

Un desarrollador debe saber de memoria qué es 8 bits. Entre los muchos usos comunes está la codificación de caracteres ASCII.

No esperaría que un programador supiera 2 14 o 2 18 , pero probablemente esperaría que ellos supieran 2 16 ya que es un número muy frecuente y un número suficientemente corto (65536) para recordar fácilmente el número completo.

1: si navegas en las tablas de clasificación de Call of Duty: MW2 o iPhone Game Center, a menudo verás tramposos en la parte superior con valores de puntaje de 2,147,483,647, que es 2 31 -1, el valor máximo de un entero < 32 .

    
respondido por el Nicole 01.02.2011 - 19:16
3

La única razón por la que puedo ver con respecto a 2 16 como "especial" es porque es uno más que el número entero más alto que puede almacenar en un solo registro en un sistema operativo de 16 bits.

De forma similar, podría aplicar la misma lógica a los sistemas operativos 2 32 y 32 bit.

Necesito saber más contexto para la pregunta antes de poder decir si fue un conocimiento significativo o no.

    
respondido por el ChrisF 01.02.2011 - 18:50

Lea otras preguntas en las etiquetas