unsigned long set;
/*set is after modified*/
set >>= 1;
Znalazłem to w wywołaniu systemowym jądra, ale nie rozumiem, jak to działa?Co oznacza operator ">> =" w C?
unsigned long set;
/*set is after modified*/
set >>= 1;
Znalazłem to w wywołaniu systemowym jądra, ale nie rozumiem, jak to działa?Co oznacza operator ">> =" w C?
Wyrażenie set >>= 1;
oznacza set = set >> 1;
to właściwe bity przesunięcie set
przez 1
(samo postaci przypisany do >>
bitowe przesunięcie w prawo kontroli operatora Bitwise Shift Operators).
Załóżmy, że jeśli set
jest:
BIT NUMBER 31 n=27 m=17 0
▼ ▼ ▼ ▼
set = 0000 1111 1111 1110 0000 0000 0000 0000
Następnie po set >> = 1;
zmienna set
postać:
BIT NUMBER 31 n=26 m=16 0
▼ ▼ ▼ ▼
set = 0000 0111 1111 1111 0000 0000 0000 0000
Wskazówki liczba bitów przesunięte.
Uwaga ciekawy punkt: Ponieważ set
jest unsigned long
więc ta operacja powinna być logical shift>>
(unsigned shift) logiczną shift nie zachowuje pewną liczbę za bitem znaku.
Dodatkowo, ponieważ przesuwasz wszystkie bity w prawo (w kierunku mniejszej liczby znaczącej), więc jedno przesunięcie w prawo to = dziel numer przez dwa.
check this code (tylko w celu wykazania ostatni punkt):
int main(){
unsigned long set = 268304384UL;
set >>= 1;
printf(" set :%lu \n", set);
set = 268304384UL;
set /= 2;
printf(" set :%lu \n", set);
return 1;
}
i wyjście:
set :134152192
set :134152192
(uwaga: jego nie oznacza >>
i /
są zarówno same)
Podobnie masz operatora <<=
dla lewej zmiany, sprawdź inne dostępne Bitwise operators i Compound assignment operators, sprawdź także dział: bit expressions i różnicę między: signed/arithmetic shift and unsigned shift.
To "przesunięcie w prawo" to wartość o jeden bit. Jeśli przesuniesz wszystkie bity liczby całkowitej w prawo o 1, wtedy efektywnie "podzielisz przez 2", ponieważ binarny jest systemem numerowania base-2.
Wyobraź sobie, że numer 12 w formacie binarnym:
1100 = 12 in binary
110 = 6 in binary (1100 right-shifted)
Podobnie jak gdybyś przeniósł wszystkie cyfry w liczbie base-10 tuż przy jednej można byłoby podzielenie przez 10.
This przełączają nieco w prawo o 1 co jest równoznaczne z podziałem przez 2. aby uzyskać więcej informacji na temat bitowego przesunięcia, patrz http://msdn.microsoft.com/en-us/library/f96c63ed(v=vs.80).aspx
powyższe polecenie wykonuje przesunięcie w prawo o jeden bit .Refer bitowych operacji mądry C ten link http://www.cprogramming.com/tutorial/bitwise_operators.html
Każdy operator binarny można połączyć z =
.We wszystkich przypadkach
dest op= expression
jest równoważna
dest = dest op expression
(chyba dest
ma żadnych skutków ubocznych, to nastąpić tylko raz).
Więc to oznacza, że
set>>=1;
odpowiada:
set = set >> 1;
Od >>
jest operatorem, prawy shift, oznacza to przesunięcie wartości w set
prawo o 1 bit.
dziękuję bardzo – Rotom92
@ Rotom92 powitanie Rotom :) –