Neden 2 ^ 16 “özel” bir sayı? [kapalı]


48

Tamam, bunu sorarken kendimi aptal hissediyorum - ama Jeff'in makalesinde: Görüşme Telefon Ekranını Almak Doğru ve asıl olarak 5 temel telefon ekranı sorusunda :

2 ^ 16 ise sorduğunuzda size boş bakmamalılar. Bu özel bir numara. Bilmeliler.

Şimdi bir süredir bir geliştirici \ yazılım mühendisi \ kod maymunu \ oldum ve şimdiye kadar karşılaştığımı sanmıyorum. Demek istediğim, onlarla ilgili temel işlemleri yapan vb. Gibi ikili değerleri kesinlikle sayabilirim. Fakat bu değer hakkında "özel" olanı göremiyorum.


6
2 bir gücü mü? :)
Michael K

2
@Michael 2^16.1aynı zamanda 2 güçtür, ancak özel bir şey değildir. İçin aynı 2^0.
sağa sola

4
@Radek: 2**0olduğu 1aslında çok özel bir numarası olan;) Ama üssü pozitif tamsayıdır evet, genellikle yalnızca iki üssü ile ilgili ediyoruz.

1
Peki, neden 10 ^ 3 veya 10 ^ 6 özel bir sayı?

4
Bu 90'lardan gelen bir röportaj sorusu mu? 16 bit o zamanlar özeldi
Chris S

Yanıtlar:


81

(2 16 - 1) veya 65535 0xFFFFveya "64k", maksimum 2 bayt değeridir. Uzun süredir CPU'lar 16-bit mimariyi kullandılar ve işletim sistemleri de aynı şekilde 16-bit işlemlere ve "sözcüklere" dayanıyordu . 16 bitlik komutlar ve 16 bitlik bellek adresleri vardı. Birçok sistem / derleyici hala tamsayılar için 16 bit kullanır.

Bu nedenle, (2 16 - 1) özeldir, çünkü 16 bit (işaretsiz) bir tamsayı tutabilir ve 16 bit mimarinin erişebileceği en büyük bellek adresidir.


23
Bilginize, aynı zamanda bir Excel elektronik tablosunda satır sayısı :)
Travis Christian

2
Hala sınır bu mu?
JeffO 18

6
Düzeltilmiş duruyorum. Belki de bir süredir aşağıya doğru kaydım.
Travis Christian

3
@Travis: Son cümlede tek tek hata var; 2 ^ 16, 17 bit gerektirir.
PSU

2
65535 ayrıca ipv4 (ve ipv6?) Protokollerinde bulunan en yüksek bağlantı noktası numarasıdır.
CoatedMoose

58

Steve Yegge'nin makalesinden tüm vücuttan,

Adaylar, bit ve baytların ne olduğunu bilmelidir. İkili sayımı yapabilmeliler; örneğin, 2 ^ 5 veya 2 ^ 10'un ondalık sayı olduğunu söyleyebilmeliler. 2 ^ 16 ise sorduğunuzda size boş bakmamalılar. Bu özel bir numara. Bilmeliler.

Ben soruda alıntı yaptığınız parçadan atıldım; Bir adayın önemini tanımlayabilmesi gerektiği gibi görünüyordu, ancak bağlamda, adayların, başlarının üstünde, 16'sının ondalık dönüşümünün ne olduğunu bilmeleri gerektiğini söylüyor .

Bunun önemi, insanlar saymak için hala ondalık kullandığımız için, özellikle kafalarımızda (çoğu durumda), depolama, bellek ve hatta karakter kodlaması için kullandığımız ortak bayt bloklarının kaba kapasitelerini bilmemiz gerekir . Bir bayt 8 bit olduğundan, en yaygın 8, 16, 24, 32 ve 64'tür.

Şu anda bir geliştiricinin uğraştığı en yaygın kapasitenin 2 32 olduğunu söyleyebilirim . 2 32'nin kabaca 4 milyar olduğunu (imzalarsa maksimum değeri ~ 2 milyar) bilmeyen geliştiricilerden şüpheliyim , çünkü veritabanlarında kaç tane kayıt saklanabileceğini asla zahmet etmediler. intbirincil anahtarlar için 32 bit s kullanın veya intkimlikler, tarihler vb. için 32 bit s kullanan eski kodların 64 bit olarak yeniden düzenlenmesi gerektiğinde kullanın. 1

2 16 , Java'nın toplam kapasitesidir short. (Toplam rakamlar -2 15 ila 2 15 -1)

Bir geliştirici, 8 bit'in ne olduğunu yürekten bilmelidir. Yaygın olarak kullanılan kullanımlar arasında ASCII karakter kodlaması bulunur.

Bir programlayıcının 2 14 veya 2 18'i bilmesini beklemem, ama muhtemelen 2 16'yı bilmelerini beklerdim, çünkü çok yaygın bir sayıdır ve tam sayıyı kolayca hatırlamak için yeterince kısa bir sayıdır (65536).


1: Call of Duty: MW2 veya iPhone Oyun Merkezi'nin lider tablolarına göz atarsanız, en yüksek değeri 2.147.483.647 olan ve en yüksek değeri 2 31 -1 olan, imzalı bir 2 32 tamsayısının değeri olan hileleri görürsünüz .


22
Hatırlanması gereken iyi bir şey 2 ^ 10'un yaklaşık bin olduğu ve oradan da 2 ^ 20'nin bir milyon olduğunu ve 2 ^ 30'un milyarlarca olduğunu vb. Ve bunun yardımıyla, 2 ^ 14'ün on altı milyon olduğunu "görmek" kolaydır, böylece ikili ve ondalık arasında hızlı bir şekilde zihinsel dönüşümler yapabilirsiniz. Ve 2 ^ 64 16 * 10 ^ 18, hmm ... 16 milyar milyar :)
Maglob

@Maglob, teşekkürler, iyi nokta. Bana bir dakika sürdüğünden beri, 2 ^ 64'e nasıl ulaştığınızı fark etmekte fayda var. 1000, 10 ^ olup kabaca 2 ^ 10 olmaktadır. 64 4 ve 60'dır. 60/10 6, 6 * 3 18'dir, yani: 10 ^ 18 * (2 ^ 4 veya 16) ...
Nicole

2
Uuh. Yukarıda bir yazım hatası yaptım (ve bir şekilde düzenleyemiyorum) 2 ^ 14 elbette on altı bin , milyon değil. (Sanırım sonuçta "görmek" o kadar kolay değildi :)
Maglob

+1 İyi cevap, çünkü daha eksiksiz bir içerik, düşünebilecek ve özellikle içerik ve etki alanı hakkında bilgi sahibi olacağınız kişiyi aradığınızdır.
hızla_

4
Um, ASCII 7-bit .. ;-)
Brendan

3

16'yı "özel" olarak görebilmemin tek nedeni , bunun 16 bitlik bir işletim sisteminde tek bir kayıt defterinde saklayabileceğiniz en yüksek tamsayıdan bir tanesi olması.

Benzer şekilde, aynı mantığı 2 32 ve 32 bit işletim sistemlerine de uygulayabilirsiniz .

Önemli bir bilgi olup olmadığını söyleyemeden önce soru için daha fazla bağlam bilmem gerekiyor.


Yemin ederim, yazdıklarının çoğunu filtrelemiş olmalıyım. Tüm gördüğüm 2 ^ 16 ve en yüksek tamsayıydı.
ChaosPandion

6
Bu yanlış. 16 bit işletim sisteminde 32 bit (veya daha yüksek) bir veri tipine sahip olmak mükemmel bir şekilde mümkündür. 16 bitlik bir tam sayı, 16 bitlik bir işlemcideki tek bir kayıt defterinde depolanabilen en büyük değerdir.
Chinmay Kanchi

@Chinmay - alınan puan;)
ChrisF
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.