Por que 2 ^ 16 é um número “especial”? [fechadas]

47

OK, eu me sinto estúpido perguntando isso - mas no artigo de Jeff: Obtendo a tela do telefone da entrevista correta e originalmente indicada em o telefone essencial 5 perguntas de tela :

They shouldn't stare blankly at you when you ask with 2^16 is. It's a special number. They should know it.

Eu tenho trabalhado como desenvolvedor \ engenheiro de software \ code monkey \ por mais algum tempo agora, e acho que nunca encontrei isso. Quero dizer, eu posso certamente contar valores binários fazendo operações básicas neles, etc, etc. Mas eu não vejo o que é "especial" sobre este valor.

    
por javamonkey79 01.02.2011 / 18:46
fonte

3 respostas

76

(2 16 - 1) ou 65535 ou 0xFFFF ou "64k" é o valor máximo de 2 bytes. Por um longo tempo as CPUs usaram arquitetura de 16 bits e os sistemas operacionais foram baseados em operações de 16 bits e "palavras" . Havia comandos de 16 bits e endereços de memória de 16 bits. Muitos sistemas / compiladores ainda usam 16 bits para números inteiros.

Portanto, (2 16 - 1) é especial porque é o maior número que um inteiro de 16 bits (não assinado) pode conter e o maior endereço de memória que uma arquitetura de 16 bits pode acessar .

    
por 01.02.2011 / 18:51
fonte
58

Do corpo inteiro do artigo de Steve Yegge,

Candidates should know what bits and bytes are. They should be able to count in binary; e.g. they should be able to tell you what 2^5 or 2^10 is, in decimal. They shouldn't stare blankly at you when you ask with 2^16 is. It's a special number. They should know it.

Eu fui jogado fora do pedaço que você citou na pergunta; Parecia que um candidato deveria ser capaz de descrever sua significância, mas no contexto ele está dizendo que os candidatos devem saber, acima de tudo, o que é a conversão decimal de 2 16 . / strong>

O significado disso é que, como nós humanos ainda usamos decimal para contagem, especialmente em nossas cabeças (na maioria das circunstâncias), precisamos conhecer as capacidades aproximadas dos blocos de bytes comuns que usamos para armazenamento, memória ou até mesmo codificação de caracteres. Como um byte é de 8 bits, os mais comuns são 8, 16, 24, 32 e 64.

No momento, eu diria que 2 32 é a capacidade mais comumente encontrada pelo desenvolvedor. Eu desconfio de desenvolvedores que não sabem que 2 32 são aproximadamente 4 bilhões (valor máximo de ~ 2 bilhões se assinados), já que isso significa que eles nunca se preocuparam em descobrir aproximadamente quantos registros podem ser armazenados em seus bancos de dados que usam 32 bits int s para chaves primárias ou quando o código antigo que usa 32 bits int s para IDs, datas, etc. precisará ser refatorado para 64 bits. > 1

2 16 é a capacidade total do Java short . (Números totais entre -2 15 e 2 15 -1)

Um desenvolvedor deve saber de cor o que é 8 bits. Entre os muitos usos comuns está a codificação de caracteres ASCII.

Eu não esperaria que um programador soubesse 2 14 ou 2 18 , mas provavelmente esperaria que eles soubessem 2 16 já que é um número muito comum e um número suficientemente curto (65536) para lembrar facilmente o número completo.

1: Se você navega nas tabelas de classificação do Call of Duty: MW2 ou iPhone Game Center, muitas vezes você vê os trapaceiros no topo com valores de pontuação altos de 2.147.483.647, que é 2 31 -1, o valor máximo de um inteiro assinado 32 .

    
por 01.02.2011 / 19:16
fonte
3

A única razão pela qual eu posso ver por considerar 2 16 como "especial" é porque ele é um a mais que o maior inteiro que você pode armazenar em um único registrador em um sistema operacional de 16 bits. >

Da mesma forma, você pode aplicar a mesma lógica aos sistemas operacionais 32 e 32 bits.

Eu precisaria saber mais contexto para a pergunta antes de poder dizer se foi um conhecimento significativo ou não.

    
por 01.02.2011 / 18:50
fonte