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


48

OK, sinto-me estúpido ao perguntar isso - mas no artigo de Jeff: Como acertar a tela do telefone da entrevista e originalmente declarado nas 5 perguntas essenciais da tela do telefone :

Eles não devem olhar fixamente para você quando você perguntar com 2 ^ 16 é. É um número especial. Eles deveriam saber disso.

Sou um desenvolvedor \ engenheiro de software \ macaco de código \ há algum tempo e acho que nunca me deparei com isso. Quero dizer, certamente posso contar valores binários, realizar operações básicas neles, etc. etc. Mas não vejo o que é "especial" sobre esse valor.


6
É uma potência de 2? :)
Michael K

2
@ Michael 2^16.1também é uma potência de 2, mas nada de especial. O mesmo para 2^0.
rightfold

4
@Radek: 2**0is 1, que é de fato um número muito especial;) Mas sim, geralmente estamos preocupados apenas com potências de dois onde o expoente é um número inteiro positivo.

11
Bem, por que 10 ^ 3 ou 10 ^ 6 é um número especial?

4
Esta é uma pergunta de entrevista dos anos 90? 16 bits eram especiais na época
Chris S

Respostas:


81

(2 16 - 1) ou 65535 ou 0xFFFFou "64k" é o valor máximo de 2 bytes. Por um longo tempo, as CPUs usaram a arquitetura de 16 bits e os SOs também se basearam 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 número inteiro de 16 bits (sem sinal) pode conter e o maior endereço de memória que uma arquitetura de 16 bits pode acessar.


23
FYI, é também o número de linhas em uma planilha do Excel :)
Travis Christian

2
Esse ainda é o limite?
JeffO 01/02

6
Eu estou corrigido. Talvez tenha sido um tempo desde que eu rolei todo o caminho.
Travis Christian

3
@ Travis: A última frase tem um erro de um por um; 2 ^ 16 requer 17 bits.
PSU

2
65535 também é o número de porta mais alto encontrado nos protocolos ipv4 (e ipv6?).
CoatedMoose

58

Do corpo inteiro do artigo de Steve Yegge,

Os candidatos devem saber o que são bits e bytes. Eles devem ser capazes de contar em binário; por exemplo, eles devem ser capazes de dizer o que é 2 ^ 5 ou 2 ^ 10, em decimal. Eles não devem olhar fixamente para você quando você perguntar com 2 ^ 16 é. É um número especial. Eles deveriam saber disso.

Fui expulso da parte que você citou na pergunta; parecia que um candidato deveria ser capaz de descrever sua importância, mas, no contexto, ele está dizendo que os candidatos devem saber, de cabeça para baixo, qual é a conversão decimal de 2 16 .

O significado disso é que, uma vez que 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é codificação de caracteres. Como um byte tem 8 bits, os mais comuns são 8, 16, 24, 32 e 64.

No momento, eu diria que 2 32 é a capacidade mais comum com a qual um desenvolvedor lida. Desconfio de desenvolvedores que não sabem que 2 32 é de aproximadamente 4 bilhões (valor máximo de ~ 2 bilhões se assinado), pois significa que eles nunca se preocuparam em descobrir aproximadamente quantos registros podem ser armazenados em seus bancos de dados que use s de 32 bits intpara chaves primárias ou quando o código antigo usando ints de 32 bits para IDs, datas etc. precisará ser refatorado para 64 bits. 1 1

2 16 é a capacidade total do Java short. (Número total 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 conhecesse 2 14 ou 2 18 , mas provavelmente esperaria que eles conhecessem 2 16, pois é um número muito comum e um número curto o suficiente (65536) para lembrar facilmente o número inteiro.


1: Se você navegar nas tabelas de classificação de Call of Duty: MW2 ou iPhone Game Center, verá frequentemente trapaceiros no topo com altos valores de pontuação de 2.147.483.647, que é 2 31 -1, o valor máximo de um número 2 32 assinado .


22
É bom lembrar que 2 ^ 10 é cerca de mil e, a partir daí, você recebe 2 ^ 20 é um milhão e 2 ^ 30 um bilhão e assim por diante. E com a ajuda disso, é um pouco fácil "ver" que 2 ^ 14 são dezesseis milhões, para que você possa rapidamente fazer conversões mentais entre binário e decimal. E 2 ^ 64 é 16 * 10 ^ 18, que é hmm ... 16 bilhões de bilhões :)
Maglob

@ Maglob, obrigado, bom ponto. Vale a pena notar como você chegou a 2 ^ 64, pois demorei um minuto. 1000 é 10 ^ 3, que é aproximadamente 2 ^ 10. 64 é 4 e 60. 60/10 é 6, 6 * 3 é de 18, assim que você começa: 10 ^ 18 * (2 ^ 4 ou 16) ...
Nicole

2
Uuh. Fiz um erro de digitação acima (e de alguma forma não consigo editá-lo) 2 ^ 14 é obviamente dezesseis mil , e não milhões. (Eu acho que não era tão fácil de "ver" depois de tudo :)
Maglob

+1 Boa resposta, porque um contexto mais completo é que você está procurando a pessoa capaz de pensar e, em particular, ter conhecimento do contexto e do domínio.
quickly_now

4
Hum, ASCII é 7-bit .. ;-)
Brendan

3

A única razão que eu vejo em relação a 2 16 como "especial" é porque é um mais que o número inteiro mais alto que você pode armazenar em um único registro em um sistema operacional de 16 bits.

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

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


Juro que devo ter filtrado a maior parte do que você escreveu. Tudo o que vi foi 2 ^ 16 e o ​​número inteiro mais alto.
#

6
Isso é impreciso. É perfeitamente possível ter um tipo de dados de 32 bits (ou superior) em um sistema operacional de 16 bits. Um número inteiro de 16 bits é simplesmente o maior valor que pode ser armazenado em um único registro em um processador de 16 bits.
Chinmay Kanchi

@Chinmay - argumentação tomada;)
ChrisF
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.