Bit düzeyinde işlem ve kullanım
Bu kodu göz önünde bulundurun:
x = 1 # 0001
x << 2 # Shift left 2 bits: 0100
# Result: 4
x | 2 # Bitwise OR: 0011
# Result: 3
x & 1 # Bitwise AND: 0001
# Result: 1
Python aritmetik operatörler anlıyorum (ve diğer diller), ama asla '' operatörleri oldukça iyi. bit anladım Yukarıdaki örnekte (Python bir kitap),-shift sol ama diğer ikisi anlıyorum.
Ayrıca, bit operatörleri aslında ne için kullanılır? Bazı örnekler memnun olurum.
CEVAP
Bit operatörleri multi-bit değerleri, ama kavramsal olarak bir seferde bir bit üzerinde çalışan operatörler.
AND
1 yalnızcaher ikisi deonun girişi 1, aksi halde 0.OR
1biri veya her ikisi deonun girişi 1, aksi halde 0.XOR
1 yalnızcatam bironun girişi 1, aksi halde 0.NOT
eğer giriş 0, aksi durumda ise 0. 1.
Bunlar genellikle doğruluk tabloları en iyi şekilde gösterilebilir. Giriş olasılıklar üstüne ve ortaya çıkan dört bit (sadece tek giriş olduğundan bu durumda iki) değerleri giriş kesiştiği noktada gösterildiği bir sol.
AND | 0 1 OR | 0 1 XOR | 0 1 NOT | 0 1
---- ----- --- ---- ---- ---- ---- ----
0 | 0 0 0 | 0 1 0 | 0 1 | 1 0
1 | 0 1 1 | 1 1 1 | 1 0
Bir örnek, eğer sen sadece, 15 (binary 1111): bir tamsayı alt 4 biti istiyorsanız
201: 1100 1001
AND 15: 0000 1111
------------------
IS 9 0000 1001
Bu durumda 15 sıfır biti etkin bir filtre olarak, sıfır olarak sonuç bit zorlama hareket.
Ayrıca, >>
<<
sık sık dahil olarak bit operatörleri, ve "shift" değeri sırasıyla sağ ve sol tarafından, belirli bir sayıda bit, atmadan bit rulo sonu sen doğru kayması ve beslenme sıfır bit diğer ucu.
Bu yüzden, örneğin:
1001 0101 >> 2 gives 0010 0101
1111 1111 << 4 gives 1111 0000
Bu durumda, başka bir örnek, bit operatörleri ise iki 4-bit değerleri istediğiniz paketi içine bir 8-bit bir kullanabilirsiniz her üç operatörleri (left-shift
, and
or
):
packed_val = ((val1 & 15) << 4) | (val2 & 15)
& 15
operasyonu değerleri sadece alt 4 bit olduğundan emin olun.<< 4
8-bit değer bir 4-bit shift üst 4 bit içineval1
taşımak için sol.|
sadece bu iki birleştirir.
val1
7 ve val2
4 ise:
val1 val2
==== ====
& 15 (and) xxxx-0111 xxxx-0100 & 15
<< 4 (left) 0111-0000 |
| |
------- -------
|
| (or) 0111-0100
Şimdiye kadar *OK* ücretsiz kullanım()...
İşlev düzeyinde statik değişkenler ayr...
Django İsim: "geçerli işlem iptal...
Nasıl Objective-C sınıf düzeyinde mal ...
Android - parça işlem Özel Animasyon ç...