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


48

OK, mi sento stupido a chiederlo, ma nell'articolo di Jeff: Ottenere lo schermo del telefono dell'intervista giusto e originariamente indicato nelle 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 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 cosa sia "speciale" su questo valore.


6
È un potere di 2? :)
Michael K,

2
@Michael ha 2^16.1anche una potenza di 2, ma niente di speciale. Lo stesso per 2^0.
destra

4
@Radek: 2**0è 1, che in realtà è un numero molto speciale;) Ma sì, generalmente ci occupiamo solo di poteri di due in cui l'esponente è un numero intero positivo.

1
Bene, perché 10 ^ 3 o 10 ^ 6 è un numero speciale?

4
È una domanda di intervista degli anni '90? All'epoca 16 bit erano speciali
Chris S,

Risposte:


81

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

Quindi, (2 16 - 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.


23
Cordiali saluti, è anche il numero di righe in un foglio di calcolo Excel :)
Travis Christian

2
È ancora questo limite?
JeffO,

6
Sono corretto. Forse è da un po 'che non mi muovo fino in fondo.
Travis Christian,

3
@Travis: l'ultima frase ha un errore off-by-one; 2 ^ 16 richiede 17 bit.
PSU

2
65535 è anche il numero di porta più alto trovato nei protocolli ipv4 (e ipv6?).
CoatedMoose

58

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; ad 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 loro testa, qual è la conversione decimale di 2 16 .

Il significato di ciò è che poiché noi umani usiamo ancora i decimali per il conteggio, specialmente nelle nostre teste (nella maggior parte dei casi), abbiamo bisogno di conoscere le capacità approssimative dei blocchi di byte comuni che usiamo per l'archiviazione, 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 diffidente nei confronti degli sviluppatori che non sanno che 2 32 sono all'incirca 4 miliardi (valore massimo di ~ 2 miliardi se firmato), dal momento che significa che non si sono mai preoccupati di scoprire all'incirca quanti record possono essere archiviati nei loro database che usa i messaggi a 32 bit intper le chiavi primarie o quando il vecchio codice che utilizza i messaggi a 32 bit intper ID, date, ecc. dovrà essere sottoposto a refactoring 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 cos'è 8 bit. Tra i molti usi comuni c'è la codifica dei caratteri ASCII.

Non mi aspetto che un programmatore conosca 2 14 o 2 18 , ma probabilmente mi aspetto che conoscano 2 16 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 gli imbroglioni in alto con un punteggio elevato di 2.147.483.647, che è 2 31 -1, il valore massimo di un intero 2 32 con segno .


22
Una buona cosa da ricordare è che 2 ^ 10 è circa mille, e da lì ottieni 2 ^ 20 è un milione, e 2 ^ 30 un miliardo e così via. E con l'aiuto di questo è in qualche modo facile "vedere" che 2 ^ 14 è di sedici milioni, quindi puoi fare rapidamente conversioni mentali tra binario e decimale. E 2 ^ 64 è 16 * 10 ^ 18, che è hmm ... 16 miliardi di miliardi :)
Maglob

@Maglob, grazie, buon punto. Vale la pena notare come sei arrivato a 2 ^ 64, dal momento che mi ci è voluto un minuto. 1000 è 10 ^ 3 che è circa 2 ^ 10. 64 è 4 e 60. 60/10 è 6, 6 * 3 è 18, quindi ottieni: 10 ^ 18 * (2 ^ 4 o 16) ...
Nicole,

2
Uuh. Ho fatto un errore di battitura sopra (e in qualche modo non può modificarlo) 2 ^ 14 è ovviamente sedici anni migliaio di , non milioni. (Immagino che dopo tutto non sia stato facile "vedere" :)
Maglob,

+1 Buona risposta, perché un contesto più completo è che stai cercando la persona in grado di pensare, e in particolare di avere una conoscenza del contesto e del dominio.
quick_now

4
Uhm, ASCII è a 7 bit .. ;-)
Brendan,

3

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

Allo stesso modo è possibile applicare la stessa logica a 2 sistemi operativi a 32 e 32 bit.

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


Giuro che devo aver filtrato la maggior parte di ciò che hai scritto. Tutto ciò che vidi fu 2 ^ 16 e il numero intero più alto.
ChaosPandion,

6
Questo è inaccurato. È perfettamente possibile avere un tipo di dati a 32 bit (o superiore) in un sistema operativo a 16 bit. Un numero intero a 16 bit è semplicemente il valore più grande che può essere memorizzato in un singolo registro su un processore a 16 bit.
Chinmay Kanchi,

@Chinmay - punto preso;)
ChrisF
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.