it-swarm.it

Perché 2 ^ 16 è un numero "speciale"?

OK, mi sento stupido a chiederlo, ma nell'articolo di Jeff: Ottenere lo schermo del telefono dell'intervista giusto e originariamente dichiarato in le 5 domande essenziali sullo schermo del telefono :

Non dovrebbero fissarti in modo assente quando lo chiedi con 2 ^ 16. È un numero speciale. Dovrebbero saperlo.

Sono stato uno sviluppatore\ingegnere del software\scimmia codice\qualunque cosa per un po 'di tempo ormai, e non credo di essermi mai imbattuto in questo. Voglio dire, posso certamente contare i valori binari che eseguono operazioni di base su di essi, ecc. Ecc. Ma non vedo ciò che è "speciale" su questo valore.

49
javamonkey79

(216 - 1) o 65535 o 0xFFFF o "64k" è il valore massimo di 2 byte. Per molto tempo le CPU hanno usato architettura a 16 bit e anche i sistemi operativi erano basati su operazioni a 16 bit e "parole" . C'erano comandi a 16 bit e indirizzi di memoria a 16 bit. Molti sistemi/compilatori usano ancora 16 bit per numeri interi.

Quindi, (216 - 1) è speciale perché è il numero più grande che può contenere un numero intero a 16 bit (senza segno) e l'indirizzo di memoria più grande a cui può accedere un'architettura a 16 bit.

82

Dall'intero corpo dell'articolo di Steve Yegge,

I candidati dovrebbero sapere quali bit e byte sono. Dovrebbero essere in grado di contare in binario; per esempio. dovrebbero essere in grado di dirti cosa sono 2 ^ 5 o 2 ^ 10, in decimali. Non dovrebbero fissarti in modo assente quando lo chiedi con 2 ^ 16. È un numero speciale. Dovrebbero saperlo.

Sono stato buttato fuori dal pezzo che hai citato nella domanda; sembrava che un candidato potesse essere in grado di descriverne il significato, ma nel contesto sta dicendo che i candidati dovrebbero sapere, al di sopra della testa, cosa la conversione decimale di 216 è.

Il significato di ciò è che poiché noi umani usiamo ancora i decimali per il conteggio, specialmente nelle nostre teste (nella maggior parte dei casi), dobbiamo conoscere le capacità approssimative dei blocchi di byte comuni che usiamo per l'archiviazione, memoria o persino codifica dei caratteri. Poiché un byte è 8 bit, i più comuni sono 8, 16, 24, 32 e 64.

Al momento direi 232 è la capacità più comune con cui uno sviluppatore si occupa. Sono diffidente nei confronti degli sviluppatori che non lo sanno 232 è all'incirca 4 miliardi (valore massimo di ~ 2 miliardi se firmato), poiché significa che non si sono mai preoccupati di scoprire all'incirca quanti record possono essere archiviati nei loro database che usano ints a 32 bit per le chiavi primarie o quando il vecchio codice che utilizza ints a 32 bit per ID, date, ecc. dovrà essere sottoposto a refactoring a 64 bit.1

216 è la capacità totale di Java short. (Numero totale compreso tra -215 e 215-1)

Uno sviluppatore dovrebbe sapere a memoria cos'è 8 bit. Tra i molti usi comuni c'è ASCII.

Non mi aspetto che un programmatore ne sappia 214 o 218 affatto, ma probabilmente mi aspetto che sappiano 216 poiché è un numero molto comune e un numero abbastanza breve (65536) per ricordare facilmente il numero completo.


1: Se navighi nelle classifiche di Call of Duty: MW2 o iPhone Game Center vedrai spesso imbroglioni in alto con un punteggio elevato di 2.147.483.647, che è 231-1, il valore massimo di un segno 232 numero intero.

58
Nicole

L'unica ragione per cui posso vedere per quanto riguarda 216 come "speciale" è perché è uno in più del numero intero più alto che è possibile memorizzare in un singolo registro su un sistema operativo a 16 bit.

Allo stesso modo potresti applicare la stessa logica a 232 e sistemi operativi a 32 bit.

Prima di poter dire se si trattava di una conoscenza significativa o meno, avrei bisogno di conoscere più contesto per la domanda.

3
ChrisF