65535 sayısı hakkında özel bir şey var mı?


11

2¹⁶-1 & 2⁵ = 2⁵ (veya? Açıkçası?)

Bir geliştirici bana bugün 65535 ve 32 bitlerinin ne olduğunu sordu. 2¹⁶-1 & 2 asked =? İlk başta kendiliğinden 32 düşündüm, ancak birkaç dakika düşündüm ve sonra 32'yi cevapladım. 32 doğru cevap gibi görünüyor ama nasıl? 65535 = 2¹⁶-1 = 1111111111111111 (ama bu ikili sayı olduğu için doğru görünmüyor çünkü hepsi -1 (?) Olmalı), 32 = 100000 ama bunu kafamda dönüştüremedim. bir şeyi cevaplamak için. Cevap 32 aslında önemsiz mi? Aynı şekilde 2¹⁶-1 & 2⁵-1 = 31 mi? Geliştirici neden bana tam olarak 65535 hakkında soru sordu?

Değerlendirmem istendiğinde ikili olan 1111111111111111 ve 100000 idi, ancak 1111111111111111'in neden -1 olmadığını anlamıyorum. -1 olmamalı mı? 65535 taşma yapan bir sayı mı ve bunu nasıl bilebilirim?


3
Özel bir şey olmalı. Bana bira için Çek ulusal standardı 56 6635'i hatırlatıyor. Hmmmm ... bira zamanı.
Joshp

5
Çok fazla varsayım yaparsınız: 65535, yalnızca 16-bit ikinin tamamlayıcı aritmetiğinde -1 verir. 16-bit kişinin tamamlayıcı aritmetiğinde -0 ve 32-bit ikinin tamamlayıcısında ve tamamlayıcı aritmetiğinde 65535 verir.
mouviciel

3
TCP bağlantı noktalarının üst sınırıdır.
Renae Lider

Yanıtlar:


23

Bu durumda sayı işaretsiz bir tamsayı olarak kabul edilir , bu da ayarlanan tüm bitlerin -1 üretmeyeceği anlamına gelir (eğer imzalanmışsa evet, doğru olacaksınız). Böylece 16 bitin tamamı size 65535 verecektir.

İlginçtir ki, işaretli durum mantık biti işlemleri yaparken bir faktör değildir. Bitler, bilgisayardaki en düşük bileşen oldukları için kendileri imzalı değildir. Cpu işlemi tarafından bitleri ex. bir kayıt imzalı veya imzasız olarak değerlendirilir.

Negatif sayılar, sayı işaretli olarak kabul edilirse (hangi "yan" veya hangi dış bitin ayarlanacağı cpu mimarisine bağlı olarak değişirse, yani big-endian / little-endian'a göre en anlamlı bit (MSB) doğru olarak ayarlanarak üretilir. ).


9
Çoğu modern makine, bitleri çevirip bir: 2'nin tamamlayıcısı ekleyerek negatif hale dönüşür. Sadece bir bit ayarlamak size +0 ve -0 olma problemini verir.
James

1
Bu mutlaka bir sorun değil. 1'in tamamlayıcısı, sonuç işaretinden bağımsız olarak sıfıra doğru kesilir. 2'nin tamamlayıcısı -finity yönünü kısaltır. Bazı uygulamalarda bu, başınızı belaya sokabilir.
John R. Strohm

18

O ise önemsiz. 65535 ikiliktir, bu nedenle AND'i 65535'ten küçük herhangi bir X ile yapmak size X verecektir.


10

Sorunuzun ikinci kısmını cevaplamak. Olarak etiketledinizyani 32 bitte 65535 00000000000000001111111111111111, imzalı veya imzasız -1 değildir .

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.