Ik vond dit in een kernel-systeem, maar ik begrijp het niet, hoe werkt het?
Antwoord 1, Autoriteit 100%
De uitdrukking set >>= 1;
betekent set = set >> 1;
DAT IS JUISTE SHIFT BITS VAN set
door 1
(zelf toegewezen vorm van >>
BITWISE RECHTSHANDELING bitwise shift operators ).
Stel dat set
is:
BIT NUMBER 31 n=27 m=17 0
▼ ▼ ▼ ▼
set = 0000 1111 1111 1110 0000 0000 0000 0000
Dan na set >>= 1;
variabele set
wordt:
BIT NUMBER 31 n=26 m=16 0
▼ ▼ ▼ ▼
set = 0000 0111 1111 1111 0000 0000 0000 0000
Let op het aantal bits verschoven.
Noteer een interessant punt: omdat set
unsigned long
, dus dit >>
bediening moet logische shift (Unsigned Shift ) Een logische shift behoudt geen nummer van een nummer.
Bovendien, omdat u alle bits naar rechts verschuift (naar het lagere significante getal), zodat één rechterverschuiving is = DIVIDE-nummer door twee.
Controleer deze code (gewoon om het laatste punt te demonstreren):
int main(){
unsigned long set = 268304384UL;
set >>= 1;
printf(" set :%lu \n", set);
set = 268304384UL;
set /= 2;
printf(" set :%lu \n", set);
return 1;
}
En uitvoer:
set :134152192
set :134152192
(let op: dit betekent niet dat >>
en /
beide hetzelfde zijn)
Op dezelfde manier heb je operator <<=
voor linkerploeg, bekijk andere beschikbare Bitwise-operatorsen Samengestelde toewijzingsoperators, controleer ook sectie: bit-expressiesen het verschil tussen: signed/arithmetic shift en unsigned shift.
Antwoord 2, autoriteit 27%
Deze “rechtsverschuiving” is de waarde met één bit. Als u alle bits van een geheel getal met 1 naar rechts verplaatst, “deelt u door 2” omdat binair een nummeringssysteem met grondtal 2 is.
Stel je voor dat je het getal 12 in binair getal hebt:
1100 = 12 in binary
110 = 6 in binary (1100 right-shifted)
Net alsof je alle cijfers in een getal met grondtal 10 naar rechts zou verplaatsen, je zou delen door 10.
Antwoord 3, autoriteit 11%
Elke binaire operator kan worden gecombineerd met =
. In alle gevallen
dest op= expression
is gelijk aan
dest = dest op expression
(behalve als dest
bijwerkingen heeft, deze treden maar één keer op).
Dit betekent dus dat
set>>=1;
is gelijk aan:
set = set >> 1;
Aangezien >>
de binaire operator voor rechtsverschuiving is, betekent dit dat de waarde in set
met 1 bit naar rechts wordt verschoven.
Antwoord 4, autoriteit 7%
Dit verschuift bit naar rechts met 1 wat gelijk is aan delen door 2. Raadpleeg http://msdn.microsoft.com/en-us/library/f96c63ed(v=vs.80).aspx
Antwoord 5, autoriteit 2%
De bovenstaande opdracht voert rechtsverschuiving met één bit uit. Raadpleeg bitsgewijze bewerkingen in c via deze link http ://www.cprogramming.com/tutorial/bitwise_operators.html