2013-07-21 19 views

cevap

15

sentezleme set >>= 1;1 (sağa kaydırma operatör kontrol Bitwise Shift Operators bit tabanlı >> kendi kendine atanmış formu) tarafından set sağ kaydırma biti olduğu set = set >> 1; anlamına gelir. set ise

varsayalım: olur

BIT NUMBER 31 n=27  m=17     0 
       ▼ ▼   ▼     ▼ 
set =   0000 1111 1111 1110 0000 0000 0000 0000 

sonra set değişken set >> = 1; sonra muayene:

BIT NUMBER 31 n=26  m=16     0 
       ▼  ▼   ▼     ▼ 
set =   0000 0111 1111 1111 0000 0000 0000 0000 

Bildirim bit sayısı kaymıştır.

Not ilginç bir nokta: setunsigned long Çünkü böylece bu >> operasyonu logical shift (unsigned shift) olmalıdır mantıksal kaydırma bir numarası'nın işaret bitini korumaz. Ayrıca, tüm bitleri sağa (daha düşük önemli sayıya) kaydırdığınız için, bir sağa kaydırma = sayıyı ikiye böler.

check this code (sadece son noktayı göstermek için):

int main(){ 
unsigned long set = 268304384UL; 
set >>= 1; 
printf(" set :%lu \n", set); 
set = 268304384UL; 
set /= 2; 
printf(" set :%lu \n", set); 
return 1; 
} 

Ve çıkışı:

set :134152192 
set :134152192 

(not: onun değil >> anlamına gelmez ve / hem aynıdır) Benzer

sol vardiya için <<= numaralı operatörünüz var, diğer mevcutları kontrol edin Bitwise operators ve Compound assignment operators, ayrıca kontrol edin: bit expressions ve arasındaki fark: signed/arithmetic shift and unsigned shift.

+0

çok teşekkür ederim – Rotom92

+0

@ Rotom92 karşılama Rotom :) –

6

Bu "sağ shift", değeri bir bit. Bir tamsayıya ait tüm bitleri sağa 1 ile taşırsanız, ikili "2'ye bölünür". Çünkü ikili bir taban-2 numaralandırma sistemidir.

Eğer ikili sayı 12 sahip düşünün:

1100 = 12 in binary 
110 = 6 in binary (1100 right-shifted) 

Tıpkı sen doğru sen 10.

3

Her ikili operatör = ile birleştirilebilir.Her durumda

dest op= expression 

dest = dest op expression 

eşdeğerdir (dest herhangi bir yan etkisi olup olmadığını hariç, bunlar sadece bir kez gerçekleşecek).

Yani bu

set>>=1; 

eşdeğer olduğu anlamına gelir: >> yana

set = set >> 1; 

ikili sağa kaydırma operatörüdür, doğru 1 bit set değeri kaydırmaya gelir.