Bitwise doğruluk tablosunu anlamak
Her mantıksal bitwise işlem, karşılık gelen her bit konumu çiftine bağımsız olarak uygulanan sabit bir doğruluk tablosunu izler.
| Bit A | Bit B | AND | OR | XOR |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
- Bu hesaplayıcı, girdileri işaretli 32 bit tam sayının aralığıyla (0 ile 2.147.483.647 arası) sınırlar, çünkü JavaScript'in bitwise operatörleri, ECMAScript spesifikasyonuna uygun olarak işlem yapmadan önce sayıları dahili olarak 32 bit gösterimlere dönüştürür.
- NOT (~A), işaretli 32 bit tam sayı olarak yorumlandığında her zaman −(A + 1)'e eşit bir sonuç üretir — bu hesaplayıcı, gösterilen ikili temsilin belirsiz olmaması için işaretsiz 32 bit karşılığını gösterir (örn. ~12, −13 yerine 4.294.967.283 olarak gösterilir).
- 31'den büyük kaydırma miktarları (B) bu hesaplayıcı tarafından 31'de sınırlandırılır, çünkü JavaScript'te 32 bit bir değeri 32 veya daha fazla konum kaydırmak, sezgisel olarak beklenebileceği gibi 0 üretmek yerine (kaydırma miktarının yalnızca alt 5 bitini kullanarak) başa sarar.
Bitwise işlemler nedir?
Bir bitwise işlem, bir sayıyı olağan 10'luk taban aritmetiği yapmak yerine, 2'lik taban gösterimindeki 0'ları ve 1'leri karşılaştırarak veya kaydırarak, tek tek ikili basamakları (bit) düzeyinde işler. Her tam sayı, her biri 2'nin bir kuvvetini temsil eden bir bit dizisi olarak ikili biçimde yazılabilir — örneğin, 12 sayısı ikili olarak 1100'dür, yani 1×8 + 1×4 + 0×2 + 0×1.
Mantıksal bitwise işlemler — AND, OR, XOR (özel veya) ve NOT — iki sayının karşılık gelen bit konumlarını karşılaştırır (veya bir sayının bitlerini tersine çevirir); bu işlem, her bit konumuna bağımsız olarak uygulanan standart Boole mantığı kurallarına göre yapılır. Kaydırma işlemleri — sola kaydırma ve sağa kaydırma — bir sayının tüm bitlerini belirtilen sayıda konum sola veya sağa taşır, bu da matematiksel olarak 2'nin bir kuvvetiyle çarpmaya veya bölmeye eşdeğerdir.
Bitwise işlemler, bilgisayar bilimi ve düşük seviyeli programlama için temeldir: bir seçenekler kümesindeki tek tek bayrakları ayarlamak, temizlemek ve kontrol etmek (bit bayrakları) için, 2'nin kuvvetleriyle hızlı çarpma ve bölme için, kriptografik algoritmalar için, grafik ve renk işleme için (kırmızı/yeşil/mavi kanallarını birleştirme) ve kompakt veri kodlama için kullanılırlar.
Bu bitwise hesaplama aracı nasıl kullanılır
- Birinci sayıyı (A) negatif olmayan bir tam sayı olarak girin (0 ile 2.147.483.647 arası, işaretli 32 bit tam sayının aralığı).
- İkinci sayıyı (B) girin. AND, OR ve XOR için bu, A ile bit bit karşılaştırılan ikinci işlenendir. Kaydırma işlemleri için bu, kaydırılacak konum sayısıdır (0–31 arası etkilidir; daha büyük değerler 31'de sınırlandırılır). NOT için B dikkate alınmaz, çünkü NOT yalnızca A üzerinde işlem yapar.
- İşlemi seçin: AND, OR, XOR, NOT, sola kaydırma veya sağa kaydırma.
- Onluk sonucu, A'nın, B'nin (veya kaydırma miktarının) ve sonucun ikili gösterimiyle birlikte okuyun.
Her bitwise işlem nasıl çalışır
AND, her bit konumunu karşılaştırır ve yalnızca her iki bit de 1 olduğunda 1, aksi halde 0 döndürür. Çözülmüş örnek: 12 (1100) AND 10 (1010) = 8 (1000), çünkü yalnızca üçüncü bit konumu (değeri 8) her iki sayıda da 1'dir.
OR, her bit konumunu karşılaştırır ve iki bitten en az biri 1 olduğunda 1 döndürür. Çözülmüş örnek: 12 (1100) OR 10 (1010) = 14 (1110). XOR (özel veya), iki bitten tam olarak biri 1 olduğunda (ikisi birden değil) 1 döndürür. Çözülmüş örnek: 12 (1100) XOR 10 (1010) = 6 (0110).
NOT, tek bir sayının her bitini tersine çevirir (0, 1 olur; 1, 0 olur). Bu hesaplayıcı 32 bit değerler üzerinde çalıştığından, NOT 12 tüm 32 biti tersine çevirir ve işaretsiz 32 bit tam sayı olarak yorumlandığında 4.294.967.283 sonucunu üretir (işaretli tam sayı olarak yorumlandığında −13'ün ikiye tümleyen gösterimi).
Sola kaydırma (A << B), A'nın her bitini B konum sola taşır ve boşalan düşük anlamlı bitleri 0 ile doldurur — A'yı 2^B ile çarpmaya eşdeğerdir. Çözülmüş örnek: 12 << 2 = 48 (12 × 2² = 12 × 4 = 48 ile eşdeğerdir). Sağa kaydırma (A >> B), A'nın her bitini B konum sağa taşır ve düşük anlamlı bitleri atar — A'nın 2^B'ye tam sayı bölümüne (aşağı yuvarlanmış) eşdeğerdir. Çözülmüş örnek: 12 >> 2 = 3 (⌊12 ÷ 4⌋ = 3 ile eşdeğerdir).
Sık yapılan hatalar
- Bitwise AND/OR'u mantıksal (Boole) AND/OR ile karıştırmak — bitwise operatörler bir sayının her bitini bağımsız olarak işlerken, mantıksal operatörler tüm değeri tek bir doğru/yanlış koşulu olarak ele alır; 0 ve 1 değerlerinin özel durumu dışında ikisi farklı sonuçlar üretir.
- Büyük miktarda sola kaydırmanın her zaman orantılı olarak daha büyük bir sayı üreteceğini beklemek — yeterince kaydırmak, anlamlı bitleri 32 bit sınırının ötesine iterek atılmalarına (taşma) neden olabilir.
- NOT sonucunu yanlış okumak — NOT, 32 bitin her birini tersine çevirdiğinden, ~A'nın işaretsiz onluk sonucu A'nın kendisinden çok daha büyük görünür, oysa işaretli ikiye tümleyen yorumunda aslında küçük bir negatif sayıyı, −(A+1)'i temsil eder.
- Sağa kaydırmayı her zaman sıradan bölmeye eşdeğer saymak — negatif olmayan bir tam sayı üzerinde sağa kaydırma, 2'nin bir kuvvetine göre tam sayı taban bölmesiyle tam olarak eşleşir, ancak negatif sayılar için davranış, aritmetik mi yoksa mantıksal mı kaydırma kullanıldığına bağlı olarak değişir.
Sıkça Sorulan Sorular
Bitwise AND ile mantıksal AND arasındaki fark nedir?
Bitwise AND (&), iki sayıyı bit bit karşılaştırır ve karşılık gelen her iki girdi biti de 1 olduğunda ilgili bitin 1 olduğu yeni bir sayı döndürür — örneğin, 12 & 10 = 8. Mantıksal AND (&&) ise her değeri bütünüyle tek bir doğru/yanlış koşulu olarak ele alır ve tek tek bitleri birleştirmek yerine doğruluk değerini değerlendirerek orijinal işlenenlerden birini veya bir boole değeri döndürür. Bu iki operatör farklı amaçlara hizmet eder ve genellikle çok farklı sonuçlar üretir.
XOR nasıl çalışır?
XOR (özel veya), iki sayıyı bit bit karşılaştırır ve karşılık gelen iki bitten tam olarak biri 1 olduğunda (ikisi birden değil, hiçbiri de değil) o konumda 1 döndürür. 12 (1100) XOR 10 (1010) için: her bit konumunu karşılaştırmak 0110 verir, bu da onluk olarak 6'dır. XOR yaygın olarak bitleri değiştirmek, iki değer arasındaki farkları tespit etmek ve basit sağlama toplamı ile eşlik hesaplamalarında kullanılır.
Sola kaydırma ne yapar?
Sola kaydırma (A << B), A'nın ikili gösterimindeki her biti B konum sola taşır ve yeni boşalan düşük anlamlı konumları 0'larla doldurur. Bu, matematiksel olarak A'yı 2'nin B'inci kuvvetiyle çarpmaya eşdeğerdir. Örneğin, 12 << 2 = 48, bu da 12 × 2² = 12 × 4 = 48 ile aynı sonuçtur.
Bitwise NOT ne yapar?
Bitwise NOT (~A), A'nın her bitini tersine çevirir — her 0, 1 olur ve her 1, 0 olur. 12'nin 32 bit gösterimine (00000000000000000000000000001100) uygulandığında, NOT tüm bu bitleri ters çevrilmiş bir değer üretir; bu değer işaretsiz 32 bit sayı olarak 4.294.967.283 şeklinde gösterilir ve işaretli tam sayı olarak ikiye tümleyen biçiminde −13'ü temsil eder (~A = −(A+1) özdeşliğine uygun olarak).
Sağa kaydırma bölmeden nasıl farklıdır?
Negatif olmayan tam sayılar için sağa kaydırma (A >> B), 2^B'ye tam sayı taban bölmesiyle tamamen aynı sonucu üretir: A >> B = ⌊A ÷ 2^B⌋. Örneğin, 12 >> 2 = 3, bu da ⌊12 ÷ 4⌋ = 3 ile eşleşir. İki işlem negatif sayılar için farklılaşabilir; burada kaydırmanın türü (aritmetik veya mantıksal) işaret bitinin nasıl ele alındığını etkiler — bu, düşük seviyeli programlama bağlamlarıyla ilgili bir ayrıntıdır.
Bitwise işlemler burada neden 32 bit tam sayılarla sınırlıdır?
JavaScript'in yerleşik bitwise operatörleri (&, |, ^, ~, <<, >>), ECMAScript dil spesifikasyonuna göre işlemi gerçekleştirmeden önce işlenenlerini dahili olarak 32 bit tam sayılara dönüştürür. Bu hesaplayıcı bu standart davranışı yansıtır, dolayısıyla girdiler 32 bitte temsil edilebilecek aralıkla sınırlıdır (burada kabul edilen negatif olmayan değerler için 0 ile 2.147.483.647 arası).
Kaynaklar
- Warren HS Jr. Hacker's Delight. 2nd ed. Addison-Wesley, 2012. (Standard reference for bitwise algorithms and two's-complement arithmetic.)
- ECMA International. ECMA-262: ECMAScript Language Specification, §6.1.6.1 (Bitwise operators, ToInt32/ToUint32). ecma-international.org.
- Patterson DA, Hennessy JL. Computer Organization and Design: The Hardware/Software Interface. 5th ed. Morgan Kaufmann, 2013. (Binary representation and bitwise logic.)