Wat betekent dit “& GT; & GT; =” -exploitant in C?

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 setdoor 1(zelf toegewezen vorm van >>BITWISE RECHTSHANDELING bitwise shift operators ).

Stel dat setis:

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

Dan na set >>= 1;variabele setwordt:

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 setunsigned 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 destbijwerkingen 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 setmet 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

Other episodes