unsigned long set;
/*set is after modified*/
set >>= 1;
Bunu bir çekirdek sistem çağrısında buldum ama anlamıyorum, nasıl çalışıyor?Bu ">> =" operatör C cinsinden ne anlama geliyor?
unsigned long set;
/*set is after modified*/
set >>= 1;
Bunu bir çekirdek sistem çağrısında buldum ama anlamıyorum, nasıl çalışıyor?Bu ">> =" operatör C cinsinden ne anlama geliyor?
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
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: set
unsigned 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.
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.
Bu bölerek olacağını tarafından bir üs-10 sayıda basamak tüm hareket ederse bit kaydırma hakkında daha fazla bilgi için, 2 ile bölünmesi eşdeğerdir 1 sağa doğru biraz http://msdn.microsoft.com/en-us/library/f96c63ed(v=vs.80).aspx
Bu komut bakınız vardiya bu bağlantıdan c bit bir bit .Refer tarafından sağa kaydırma akıllı işlemleri gerçekleştirir http://www.cprogramming.com/tutorial/bitwise_operators.html
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.
çok teşekkür ederim – Rotom92
@ Rotom92 karşılama Rotom :) –