Pourquoi 2 ^ 16 est-il un numéro «spécial»? [fermé]

48

OK, je me sens stupide de poser cette question - mais dans l'article de Jeff: Obtenir l'écran de téléphone de l'interview correct et initialement indiqué dans les 5 questions essentielles de l'écran de téléphone :

Ils ne devraient pas vous regarder fixement quand vous demandez avec 2 ^ 16 is. C'est un numéro spécial. Ils devraient le savoir.

Je suis développeur \ ingénieur en logiciel \ code singe \, peu importe, depuis un moment maintenant, et je ne pense pas avoir jamais rencontré cela. Je veux dire, je peux certainement compter les valeurs binaires, faire des opérations de base dessus, etc. Mais je ne vois pas ce qui est "spécial" dans cette valeur.

javamonkey79
la source
6
C'est une puissance de 2? :)
Michael K
2
@ Michael 2^16.1est aussi une puissance de 2, mais rien de spécial. Pareil pour 2^0.
droitier le
4
@Radek: 2**0is 1, qui est en fait un nombre très spécial;) Mais oui, nous ne sommes généralement concernés que par les puissances de deux où l'exposant est un entier positif.
1
Eh bien, pourquoi 10 ^ 3 ou 10 ^ 6 est-il un numéro spécial?
4
Est-ce une question d'entrevue des années 90? 16 bits étaient spéciaux à l'époque
Chris S

Réponses:

81

(2 16 - 1) ou 65535 ou 0xFFFFou "64k" est la valeur maximale de 2 octets. Pendant longtemps, les processeurs utilisaient une architecture 16 bits et les systèmes d'exploitation étaient également basés sur des opérations et des "mots" 16 bits . Il y avait des commandes 16 bits et des adresses mémoire 16 bits. Beaucoup de systèmes / compilateurs utilisent encore 16 bits pour les entiers.

Donc, (2 16 - 1) est spécial parce que c'est le plus grand nombre qu'un entier 16 bits (non signé) peut contenir et la plus grande adresse mémoire à laquelle une architecture 16 bits peut accéder.

Travis Christian
la source
23
Pour votre information, c'est aussi le nombre de lignes d'un tableur Excel :)
Travis Christian
2
Est-ce toujours la limite?
JeffO
6
Je me suis trompé. Peut-être que ça fait longtemps que je n’ai pas fait défiler la liste.
Travis Christian
3
@Travis: La dernière phrase a une erreur unique; 2 ^ 16 nécessite 17 bits.
PSU
2
65535 est également le numéro de port le plus élevé trouvé dans les protocoles ipv4 (et ipv6?).
CoatedMoose
58

De tout le corps de l'article de Steve Yegge,

Les candidats doivent savoir ce que sont les bits et les octets. Ils devraient pouvoir compter en binaire; Par exemple, ils devraient pouvoir vous dire ce que 2 ^ 5 ou 2 ^ 10 est, en décimal. Ils ne devraient pas vous regarder fixement quand vous demandez avec 2 ^ 16 is. C'est un numéro spécial. Ils devraient le savoir.

J'ai été ému du morceau que vous avez cité dans la question; On aurait dit qu'un candidat devrait être capable de décrire son importance, mais il dit dans son contexte que les candidats doivent savoir, de mémoire, ce qu'est la conversion décimale de 2 16 .

L’importance de cela est que, puisque nous utilisons toujours le nombre décimal pour le comptage, en particulier dans notre tête (dans la plupart des cas), nous devons connaître les capacités approximatives des blocs d’octets communs que nous utilisons pour le stockage, la mémoire ou même l’encodage de caractères. Comme un octet est composé de 8 bits, les plus courants sont 8, 16, 24, 32 et 64.

À l'heure actuelle, je dirais que 2 32 est la capacité la plus courante rencontrée par un développeur. Je me méfie des développeurs qui ne savent pas que 2 32 représente environ 4 milliards (valeur maximale d'environ 2 milliards si signés), car cela signifie qu'ils ne se sont jamais souciés de savoir approximativement combien d'enregistrements peuvent être stockés dans leurs bases de données qui utilisez 32 bits intpour les clés primaires ou lorsqu'un ancien code utilisant 32 bits intpour les identifiants, les dates, etc. doit être remodelé en 64 bits. 1

2 16 est la capacité totale de Java short. (Nombre total compris entre -2 15 et 2 15 -1)

Un développeur doit savoir par cœur ce qu’est 8 bits. Le codage de caractères ASCII est l’un des nombreux usages courants.

Je ne m'attendrais pas à ce qu'un programmeur connaisse 2 14 ou 2 18 , mais je m'attendrais probablement à ce qu'il connaisse 2 16 puisqu'il s'agit d'un nombre très courant et d'un nombre suffisamment court (65 536) pour mémoriser facilement le nombre complet.


1: Si vous parcourez les classements de Call of Duty: MW2 ou iPhone Game Center, vous verrez souvent des tricheurs en haut du classement avec un score élevé de 2 147 483 647, ce qui correspond à 2 31 -1, la valeur maximale d'un entier signé de 2 32 .

Nicole
la source
22
Une bonne chose à retenir est que 2 ^ 10 est environ un millier, et de là vous obtenez 2 ^ 20 soit un million, et 2 ^ 30 un milliard et ainsi de suite. Et avec l'aide de ceci, il est un peu facile de "voir" que 2 ^ 14 est de seize millions, de sorte que vous pouvez rapidement effectuer des conversions mentales entre binaires et décimales. Et 2 ^ 64 est 16 * 10 ^ 18, ce qui est hmm ... 16 milliards de milliards :)
Maglob
@Maglob, merci, bon point. Il est intéressant de noter comment vous êtes arrivé à 2 ^ 64 ans, car cela m'a pris une minute. 1000 correspond à 10 ^ 3, ce qui correspond à peu près à 2 ^ 10. 64 est 4 et 60. 60/10 est 6, 6 * 3 est 18, de sorte que vous obtenez: 10 ^ 18 * (2 ^ 4 ou 16) ...
Nicole
2
Uuh. J'ai fait une faute de frappe ci-dessus (et d'une manière ou d'une autre, je ne peux pas la modifier). 2 ^ 14 est bien entendu seize mille , pas un million. (Je suppose que ce n'était pas si facile de "voir" après tout :)
Maglob
+1 Bonne réponse, car dans un contexte plus complet, vous recherchez une personne capable de penser, et en particulier une connaissance du contexte et du domaine.
Rapidement maintenant
4
Euh, l'ASCII est en 7 bits .. ;-)
Brendan le
3

La seule raison pour laquelle je vois que 2 16 est considéré comme "spécial" est parce que c'est un entier de plus que le plus grand entier que vous pouvez stocker dans un seul registre sur un système d'exploitation 16 bits.

De même, vous pouvez appliquer la même logique à 2 systèmes d'exploitation 32 et 32 ​​bits.

J'aurais besoin de connaître davantage le contexte de la question avant de pouvoir dire s'il s'agissait d'un élément de connaissance important ou non.

ChrisF
la source
Je jure que j'ai dû filtrer la plupart de ce que vous avez écrit. Tout ce que j'ai vu était 2 ^ 16 et le plus grand entier.
ChaosPandion
6
C'est inexact. Il est parfaitement possible d'avoir un type de données 32 bits (ou supérieur) dans un système d'exploitation 16 bits. Un entier de 16 bits est simplement la valeur la plus grande pouvant être stockée dans un seul registre sur un processeur de 16 bits.
Chinmay Kanchi
@Chinmay - Point pris;)
ChrisF