Perché 2 ^ 16 è un numero "speciale"? [chiuso]

47

OK, mi sento stupido a chiederlo - ma nell'articolo di Jeff: Ottenere la schermata del telefono dell'intervista corretta e originariamente indicata in il 5 telefono essenziale domande sullo schermo :

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

Sono stato uno sviluppatore \ software engineer \ code monkey \ qualunque per un po 'di tempo, e non credo di averlo mai visto. Voglio dire, posso certamente contare i valori binari per eseguire operazioni di base su di essi, ecc. Ecc. Ma non vedo cosa sia "speciale" per questo valore.

    
posta javamonkey79 01.02.2011 - 18:46
fonte

3 risposte

76

(2 16 - 1) o 65535 o 0xFFFF o "64k" è il valore massimo di 2 byte. Per un lungo periodo di tempo le CPU utilizzate architettura a 16 bit e i sistemi operativi erano anch'essi 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 i numeri interi.

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

    
risposta data 01.02.2011 - 18:51
fonte
58

Da tutto il corpo dell'articolo di 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.

Sono stato buttato fuori dal pezzo che hai citato nella domanda; sembrava che un candidato dovesse essere in grado di descriverne il significato, ma nel contesto sta dicendo che i candidati dovrebbero sapere, in cima alla loro testa, cosa è la conversione decimale di 2 16 .

Il significato di questo è che poiché noi umani utilizziamo ancora i decimali per il conteggio, specialmente nelle nostre teste (nella maggior parte dei casi), abbiamo bisogno di conoscere le ruvide capacità dei blocchi di byte comuni che usiamo per la memorizzazione, la memoria o persino la codifica dei caratteri. Poiché un byte è 8 bit, i più comuni sono 8, 16, 24, 32 e 64.

Al momento, direi che 2 32 è la capacità più comune con cui uno sviluppatore si occupa. Sono sospettoso degli sviluppatori che non sanno che 2 32 è di circa 4 miliardi (valore massimo di ~ 2 miliardi se firmato), poiché significa che non si sono mai preoccupati di scoprire approssimativamente quanti record possono essere archiviati nei loro database che utilizzano il 32% bit diint s per le chiavi primarie, o quando il vecchio codice che utilizza il 32% bitint s per ID, date, ecc. dovrà essere rifatto a 64 bit. 1

2 16 è la capacità totale di Java short . (Numero totale compreso tra -2 15 e 2 15 -1)

Uno sviluppatore dovrebbe sapere a memoria cosa sia 8 bit. Tra i molti usi comuni è la codifica dei caratteri ASCII.

Non mi aspetto che un programmatore sappia 2 14 o 2 18 , ma probabilmente mi aspetterei che sappiano 2 16 dato che è un numero molto comune e un numero abbastanza breve (65536) per ricordare facilmente il numero completo.

1: Se sfogli le classifiche di Call of Duty: MW2 o iPhone Game Center vedrai spesso imbroglioni in alto con valori di punteggio elevato di 2.147.483.647, ovvero 2 31 -1, il valore massimo di un intero 2 32 firmato

    
risposta data 01.02.2011 - 19:16
fonte
3

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

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

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

    
risposta data 01.02.2011 - 18:50
fonte

Leggi altre domande sui tag