it-swarm-id.com

Mengapa 2 ^ 16 nomor "istimewa"?

OK, saya merasa bodoh menanyakan hal ini - tetapi dalam artikel Jeff: Mendapatkan Layar Telepon Wawancara Kanan dan semula dinyatakan dalam 5 pertanyaan layar telepon penting :

Mereka seharusnya tidak menatap kosong pada Anda ketika Anda bertanya dengan 2 ^ 16 adalah. Ini nomor khusus. Mereka harus mengetahuinya.

Saya telah menjadi pengembang\insinyur perangkat lunak\kode monyet\apa pun untuk sementara waktu sekarang, dan saya tidak berpikir saya pernah menemukan ini. Maksudku, aku pasti bisa menghitung nilai biner melakukan operasi dasar pada mereka, dll, dll. Tapi aku tidak melihat apa yang "istimewa" tentang nilai ini.

49
javamonkey79

(216 - 1) atau 65535 atau 0xFFFF atau "64k" adalah nilai maksimum 2 byte. Untuk waktu yang lama CPU digunakan arsitektur 16-bit dan OS juga didasarkan pada operasi 16-bit dan "kata-kata" . Ada perintah 16-bit dan alamat memori 16-bit. Banyak sistem/kompiler masih menggunakan 16 bit untuk integer.

Jadi, (216 - 1) istimewa karena merupakan angka terbesar yang dapat dimiliki oleh integer 16-bit (unsigned) dan alamat memori terbesar yang dapat diakses oleh arsitektur 16-bit.

82

Dari seluruh isi artikel Steve Yegge,

Calon harus tahu apa itu bit dan byte. Mereka harus bisa menghitung dalam biner; misalnya mereka harus bisa memberi tahu Anda apa 2 ^ 5 atau 2 ^ 10 dalam desimal. Mereka seharusnya tidak menatap kosong pada Anda ketika Anda bertanya dengan 2 ^ 16 adalah. Ini nomor khusus. Mereka harus mengetahuinya.

Saya terlempar dari bagian yang Anda kutip dalam pertanyaan; kedengarannya seperti seorang kandidat harus dapat menggambarkan signifikansi itu, tetapi dalam konteksnya dia mengatakan bahwa para kandidat harus tahu, di atas kepala mereka, apa konversi desimal 216 adalah.

Signifikansi dari hal ini adalah bahwa karena kita manusia masih menggunakan desimal untuk menghitung, terutama di kepala kita (dalam sebagian besar keadaan), kita perlu mengetahui kapasitas kasar dari blok byte umum yang kita gunakan untuk penyimpanan, memori, atau bahkan penyandian karakter. Karena byte adalah 8 bit, yang paling umum adalah 8, 16, 24, 32, dan 64.

Saat ini saya akan mengatakan 232 adalah kapasitas paling umum yang dihadapi oleh pengembang. Saya curiga pada pengembang yang tidak tahu 232 kira-kira 4 miliar (nilai maksimum ~ 2 miliar jika ditandatangani), karena itu berarti mereka tidak pernah repot-repot untuk mengetahui secara kasar berapa banyak rekaman yang dapat disimpan dalam database mereka yang menggunakan 32-bit ints untuk kunci primer , atau ketika kode lama menggunakan 32-bit ints untuk ID, tanggal, dll. perlu dire-refored ke 64-bit.1

216 adalah total kapasitas Java short. (Jumlah total antara -215 dan 215-1)

Seorang pengembang harus hafal 8-bit. Di antara banyak penggunaan umum adalah ASCII encoding karakter.

Saya tidak berharap seorang programmer tahu 214 atau 218 sama sekali, tapi saya mungkin berharap mereka tahu 216 karena ini adalah angka yang sangat umum dan angka yang cukup pendek (65536) untuk dengan mudah mengingat angka penuh.


1: Jika Anda meramban papan peringkat Call of Duty: MW2 atau iPhone Game Center Anda akan sering melihat curang di atas dengan nilai skor tinggi 2.147.483.647, yang merupakan 231-1, nilai maksimum dari yang ditandatangani 232 bilangan bulat.

58
Nicole

Satu-satunya alasan saya dapat melihat tentang 216 sebagai "spesial" adalah karena lebih dari integer tertinggi yang dapat Anda simpan dalam satu register pada sistem operasi 16 bit.

Demikian pula Anda dapat menerapkan logika yang sama ke 232 dan sistem operasi 32 bit.

Saya perlu tahu lebih banyak konteks untuk pertanyaan sebelum dapat mengatakan apakah itu adalah pengetahuan yang signifikan atau tidak.

3
ChrisF