web-dev-qa-db-fra.com

Pourquoi 2 ^ 16 est-il un numéro "spécial"?

OK, je me sens stupide de demander ceci - mais dans l'article de Jeff: Obtenir le bon écran du téléphone de l'interview et initialement indiqué dans les 5 questions essentielles de l'écran du téléphone :

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

Je suis développeur\ingénieur logiciel\code singe\quoi que ce soit depuis un petit moment maintenant, et je ne pense pas l'avoir rencontré. Je veux dire, je peux certainement compter les valeurs binaires faire des opérations de base sur elles, etc., etc. Mais je ne vois pas ce qui est "spécial" à propos de cette valeur.

49
javamonkey79

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

Donc, (216 - 1) est spécial car il s'agit du plus grand nombre qu'un entier 16 bits (non signé) peut contenir et de la plus grande adresse mémoire à laquelle une architecture 16 bits peut accéder.

82
Travis Christian

Du corps entier de l'article de Steve Yegge,

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

J'ai été désarçonné du morceau que vous avez cité dans la question; cela sonnait comme un candidat devrait être en mesure de décrire son importance, mais dans le contexte, il dit que les candidats devraient savoir, du haut de leur tête, quoi la conversion décimale de 216 est.

La signification de cela est que, puisque nous, les humains, utilisons encore la décimale pour le comptage, en particulier dans nos têtes (dans la plupart des cas), nous devons connaître les capacités approximatives des blocs d'octets communs que nous utilisons pour le stockage, mémoire, ou même encodage de caractères. Puisqu'un octet est de 8 bits, les plus courants sont 8, 16, 24, 32 et 64.

À l'heure actuelle, je dirais 232 est la capacité la plus courante d'un développeur. Je me méfie des développeurs qui ne le savent pas 232 est d'environ 4 milliards (valeur maximale de ~ 2 milliards si signé), car cela signifie qu'ils n'ont jamais pris la peine de savoir à peu près combien d'enregistrements peuvent être stockés dans leurs bases de données qui utilisent ints 32 bits pour les clés primaires , ou lorsque l'ancien code utilisant ints 32 bits pour les ID, les dates, etc. devra être refactorisé en 64 bits.1

216 est la capacité totale du Java short. (Nombre total compris entre -215 et 215-1)

Un développeur doit savoir par cœur ce qu'est le 8 bits. Parmi les nombreuses utilisations courantes, il y a ASCII encodage de caractères.

Je ne m'attendrais pas à ce qu'un programmeur sache 214 ou 218 du tout, mais je m'attendrais probablement à ce qu'ils sachent 216 car il s'agit d'un nombre très courant et d'un nombre suffisamment court (65536) pour se souvenir facilement du nombre complet.


1: Si vous parcourez les classements de Call of Duty: MW2 ou iPhone Game Center, vous verrez souvent des tricheurs au sommet avec des scores élevés de 2147483647, soit 231-1, la valeur maximale d'un 2 signé32 entier.

58
Nicole

La seule raison pour laquelle je peux voir concernant 216 "spécial" est parce que c'est un de plus que l'entier le plus élevé 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 à 232 et les systèmes d'exploitation 32 bits.

J'aurais besoin de plus de contexte pour la question avant de pouvoir dire si c'était une connaissance importante ou non.

3
ChrisF