Mengapa 2 ^ 16 merupakan nomor "spesial"? [Tutup]

48

OK, saya merasa bodoh menanyakan hal ini - tetapi dalam artikel Jeff: Mendapatkan Layar Telepon Wawancara dengan Benar dan awalnya dinyatakan dalam 5 pertanyaan layar ponsel yang 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.

javamonkey79
sumber
6
Itu kekuatan 2? :)
Michael K
2
@ Michael 2^16.1juga kekuatan 2, tapi tidak ada yang istimewa. Sama untuk 2^0.
sayap kanan
4
@ Radek: 2**0adalah 1, yang notabene nomor yang sangat khusus;) Tapi ya, kita umumnya hanya peduli dengan kekuatan dua di mana eksponen adalah bilangan bulat positif.
1
Nah, mengapa 10 ^ 3 atau 10 ^ 6 nomor khusus?
4
Apakah ini pertanyaan wawancara dari tahun 90-an? 16 bit istimewa saat itu
Chris S

Jawaban:

81

(2 16 - 1) atau 65535 atau 0xFFFFatau "64k" adalah nilai maksimum 2 byte. Untuk waktu yang lama CPU menggunakan 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, (2 16 - 1) adalah istimewa karena ini adalah angka terbesar yang dapat disimpan oleh integer 16-bit (tidak ditandatangani) dan alamat memori terbesar yang dapat diakses oleh arsitektur 16-bit.

Christian Travis
sumber
23
FYI, ini juga jumlah baris dalam spreadsheet Excel :)
Travis Christian
2
Apakah itu masih batasnya?
JeffO
6
Saya berdiri dikoreksi. Mungkin sudah cukup lama sejak saya menggulir ke bawah.
Travis Christian
3
@ Travis: Kalimat terakhir memiliki kesalahan satu per satu; 2 ^ 16 membutuhkan 17 bit.
PSU
2
65535 juga merupakan nomor port tertinggi yang ditemukan dalam protokol ipv4 (dan ipv6?).
CoatedMoose
58

Dari seluruh artikel Steve Yegge,

Calon harus tahu apa itu bit dan byte. Mereka harus bisa menghitung dalam biner; misalnya mereka harus dapat memberi tahu Anda apa 2 ^ 5 atau 2 ^ 10 adalah, 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 2 16 itu.

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

Pada saat ini saya akan mengatakan 2 32 adalah kapasitas yang paling umum terjadi dengan pengembang. Saya curiga pada pengembang yang tidak tahu bahwa 2 32 kira-kira 4 miliar (nilai maksimum ~ 2 miliar jika ditandatangani), karena itu berarti mereka tidak pernah repot-repot mencari tahu berapa banyak catatan yang dapat disimpan dalam database mereka yang gunakan 32-bit ints untuk kunci utama, atau ketika kode lama menggunakan 32-bit intuntuk ID, tanggal, dll. akan perlu di refactored menjadi 64-bit. 1

2 16 adalah total kapasitas Jawa short. (Total angka antara -2 15 dan 2 15 -1)

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

Saya tidak akan mengharapkan seorang programmer tahu 2 14 atau 2 18 sama sekali, tapi saya mungkin akan berharap bahwa mereka tahu 2 16 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 2 31 -1, nilai maksimum bilangan bulat 2 32 yang ditandatangani .

Nicole
sumber
22
Hal yang baik untuk diingat adalah bahwa 2 ^ 10 adalah sekitar seribu, dan dari sana Anda mendapatkan 2 ^ 20 adalah sejuta, dan 2 ^ 30 miliar dan seterusnya. Dan dengan bantuan ini agak mudah untuk "melihat" bahwa 2 ^ 14 adalah enam belas juta, sehingga Anda dapat dengan cepat melakukan konversi mental antara biner dan desimal. Dan 2 ^ 64 adalah 16 * 10 ^ 18, yang merupakan hmm ... 16 miliar miliar :)
Maglob
@ Mamlob, terima kasih, poin bagus. Perlu dicatat bagaimana Anda tiba di 2 ^ 64, karena saya butuh satu menit. 1000 adalah 10 ^ 3 yang kira-kira 2 ^ 10. 64 adalah 4 dan 60. 60/10 adalah 6, 6 * 3 adalah 18, sehingga Anda mendapatkan: 10 ^ 18 * (2 ^ 4 atau 16) ...
Nicole
2
Uuh. Saya membuat kesalahan ketik di atas (dan entah bagaimana tidak bisa mengeditnya) 2 ^ 14 tentu saja enam belas ribu , bukan juta. (Saya kira itu tidak mudah untuk "melihat" setelah semua :)
Maglob
+1 Jawaban yang bagus, karena konteks yang lebih lengkap adalah Anda mencari orang yang dapat berpikir, dan khususnya memiliki pengetahuan tentang konteks dan domain.
quick_now
4
Um, ASCII adalah 7-bit .. ;-)
Brendan
3

Satu-satunya alasan saya dapat melihat untuk menganggap 16 sebagai "istimewa" adalah karena ini adalah satu lebih dari bilangan bulat tertinggi yang dapat Anda simpan dalam satu register pada sistem operasi 16 bit.

Demikian pula Anda dapat menerapkan logika yang sama untuk 2 sistem operasi 32 dan 32 bit.

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

ChrisF
sumber
Aku bersumpah aku pasti telah memfilter sebagian besar dari apa yang kamu tulis. Yang saya lihat adalah 2 ^ 16 dan bilangan bulat tertinggi.
ChaosPandion
6
Ini tidak akurat. Sangat mungkin untuk memiliki tipe data 32-bit (atau lebih tinggi) dalam sistem operasi 16-bit. Bilangan bulat 16-bit hanyalah nilai terbesar yang dapat disimpan dalam register tunggal pada prosesor 16-bit.
Chinmay Kanchi
@Chinmay - poin diambil;)
ChrisF