C Operatoriai bitų pavidalu: AND, OR, XOR, Shift & Papildymas (su pavyzdžiu)

Kas yra „Bitwise“ operatoriai?

„BITWISE“ OPERATORIAI naudojami manipuliuojant duomenimis bitų lygiu, dar vadinamais bitų lygio programavimu. Bitiškai veikia vienas ar keli bitų modeliai arba dvejetainiai skaitmenys jų atskirų bitų lygyje. Jie naudojami skaičiuojant, kad skaičiavimo procesas būtų greitesnis.

Toliau pateikiamas „C“ programavimo kalbos pateiktų operatorių sąrašas bitais:

operatorius Reikšmė
& Operatorius bitais IR
| ARBA operatorius
^ Išskirtinis ARBA operatorius
~ „Binary One“ papildomas operatorius yra vienarūšis operatorius
<< Kairiosios poslinkio operatorius
>> Dešiniojo poslinkio operatorius

Operatoriai „Bitwise“ negali būti tiesiogiai taikomi primityviems duomenų tipams, tokiems kaip „float“, „double“ ir kt. Visada atminkite vieną dalyką, kad bitų operacijų operatoriai dažniausiai naudojami su sveikojo skaičiaus duomenų tipu dėl jo suderinamumo.

Bitais loginiais operatoriais duomenys apdorojami po truputį, pradedant nuo mažiausiai reikšmingo bito, ty LSB bito, kuris yra dešinysis bitas, dirbdamas link MSB (Most Significant Bit), kuris yra kairiausias bitas.

Bittečių loginių operatorių skaičiavimo rezultatas parodytas toliau pateiktoje lentelėje.

x y x & y x | y x y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Šioje pamokoje sužinosite

  • Kas yra „Bitwise“ operatoriai?
  • Bitais IR
  • ARBA bitais
  • Išskirtinis ARBA
  • Bitų keitimo operatoriai
  • Bitiškai papildo operatorių

Bitais IR

Tai yra vienas iš dažniausiai naudojamų loginių bitų operatorių. Ją žymi vienas „ampersand“ ženklas (&). Dvi sveiko skaičiaus išraiškos parašytos kiekvienoje (&) operatoriaus pusėje.

Operacijos bitais IR rezultatas yra 1, jei abiejų bitų vertė yra 1; priešingu atveju rezultatas visada yra 0.

Apsvarstykime, kad turime 2 kintamuosius op1 ir op2, kurių reikšmės yra šios:

Op1 = 0000 1101Op2 = 0001 1001

Bus kintamųjų op1 ir op2 AND operacijos rezultatas

Result = 0000 1001

Kaip matome, po du kintamuosius lyginami po truputį. Kai abiejų kintamųjų bitų vertė yra 1, rezultatas bus 1 arba 0.

ARBA bitais

Jį žymi vienas vertikalios juostos ženklas (|). Po dvi sveiko skaičiaus išraiškas parašyta kiekvienoje operatoriaus (|) pusėje.

Operacijos bitais OR rezultatas yra 1, jei bent vienos iš išraiškos reikšmė yra 1; priešingu atveju rezultatas visada yra 0.

Apsvarstykime, kad turime 2 kintamuosius op1 ir op2, kurių reikšmės yra šios:

Op1 = 0000 1101Op2 = 0001 1001

AR kintamųjų op1 ir op2 operacijos rezultatas bus

Result = 0001 1101

Kaip matome, po du kintamuosius lyginami po truputį. Kai vieno iš kintamųjų bitų vertė yra 1, rezultatas bus 1 arba 0.

Išskirtinis ARBA

Ją žymi simbolis (^). Po dvi sveiko skaičiaus išraiškas parašyta kiekvienoje operatoriaus (^) pusėje.

Operacijos bitais Exclusive-OR rezultatas yra 1, jei tik vienos iš išraiškos reikšmė yra 1; priešingu atveju rezultatas visada yra 0.

Apsvarstykime, kad turime 2 kintamuosius op1 ir op2, kurių reikšmės yra šios:

Op1 = 0000 1101Op2 = 0001 1001

AR kintamųjų op1 ir op2 operacijos rezultatas bus

Result = 0001 0100

Kaip matome, po du kintamuosius lyginami po truputį. Kai tik vienas kintamasis turi 1 reikšmę, rezultatas yra 0, o rezultatas bus 0.

Parašykime paprastą programą, kuri parodo bitų loginius operatorius.

#include int main(){int a = 20; /* 20 = 010100 */int b = 21; /* 21 = 010101 */int c = 0;c = a & b; /* 20 = 010100 */printf("AND - Value of c is %d\n", c );c = a | b; /* 21 = 010101 */printf("OR - Value of c is %d\n", c );c = a b; /* 1 = 0001 */printf("Exclusive-OR - Value of c is %d\n", c );getch();}

Išvestis:

AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1

Bitų keitimo operatoriai

Bitų poslinkio operatoriai naudojami perkelti / perkelti bitų modelius į kairę arba į dešinę pusę. Kairė ir dešinė yra du „C“ perjungimo operatoriai, kurie pavaizduoti taip:

Operand << n (Left Shift)Operand >> n (Right Shift)

Čia

  • operandas yra sveiko skaičiaus išraiška, kuriai turime atlikti poslinkio operaciją.
  • „n“ yra bendras bitų pozicijų skaičius, kurį turime pakeisti sveikojo skaičiaus išraiškoje.

Kairės poslinkio operacija perkelia „n“ bitų skaičių į kairę pusę. Kairiausi išraiškos bitai bus iššokti, o dešinėje pusėje bus užpildyti n bitai, kurių vertė 0.

Dešiniuoju poslinkiu „n“ bitų skaičius bus perkeltas į dešinę pusę. Dešinieji dešinieji išraiškos „n“ bitai bus iššokti, o vertė 0 bus užpildyta kairėje pusėje.

Pavyzdys: x yra sveiko skaičiaus išraiška su duomenimis 1111. Atlikus poslinkio operaciją rezultatas bus:

x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011

Pamainų operatorius galima sujungti, tada juos galima naudoti norint išgauti duomenis iš sveiko skaičiaus išraiškos. Parašykime programą, kad parodytume bitų poslinkio operatorių naudojimą.

#include int main() {int a = 20; /* 20 = 010100 */int c = 0;c = a << 2; /* 80 = 101000 */printf("Left shift - Value of c is %d\n", c );c = a >> 2; /*05 = 000101 */printf("Right shift - Value of c is %d\n", c );return 0;}

Išvestis:

Left shift - Value of c is 80Right shift - Value of c is 5

Atlikus kairiojo poslinkio operaciją, vertė bus 80, kurios dvejetainis ekvivalentas yra 101000.

Atlikus dešiniojo poslinkio operaciją, vertė taps 5, kurios dvejetainis ekvivalentas yra 000101.

Bitiškai papildo operatorių

Bitinis komplementas taip pat vadinamas komplemento operatoriumi, nes jis visada reikalauja tik vienos reikšmės arba operando. Tai unariškas operatorius.

Kai mes atliekame papildymą bet kokiais bitais, visi 1 tampa 0 ir atvirkščiai.

Jei turime sveiko skaičiaus išraišką, kurioje yra 0000 1111, atlikus papildinio bitų operaciją, reikšmė taps 1111 0000.

Bitais papildomas operatorius žymimas simboliu tilde (~).

Parašykime programą, parodančią bitų papildo operatoriaus įgyvendinimą.

#include int main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}

Išvestis:

Complement - Value of c is -11

Čia yra dar viena programa su visų iki šiol aptartų operų pavyzdžiu:

#include main() {unsigned int x = 48; /* 48 = 0011 0000 */unsigned int y = 13; /* 13 = 0000 1101 */int z = 0;z =x & y; /* 0 = 0000 0000 */printf("Bitwise AND Operator - x & y = %d\n", z );z = x | y; /* 61 = 0011 1101 */printf("Bitwise OR Operator - x | y = %d\n", z );z= x^y; /* 61 = 0011 1101 */printf("Bitwise XOR Operator- x^y= %d\n", z);z = ~x; /*-61 = 1100 0011 */printf("Bitwise One's Complement Operator - ~x = %d\n", z);z = x << 2; /* 192 = 1100 0000 */printf("Bitwise Left Shift Operator x << 2= %d\n", z );z= x >> 2; /* 12 = 0000 1100 */printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}

Kai sukompiliavome ir paleidome programą, gaunamas toks rezultatas:

Bitwise AND Operator - x & y = 0Bitwise OR Operator - x | y = 61Bitwise XOR Operator- x^y= 61Bitwise One's Complement Operator - ~x = -49Bitwise Left Shift Operator x << 2= 192Bitwise Right Shift Operator x >> 2= 12

Santrauka

  • „Bitwise“ operatoriai yra specialus operatorius, kurį pateikia „C.“
  • Jie naudojami programuojant bitų lygiu.
  • Šie operatoriai naudojami manipuliuoti sveiko skaičiaus išraiškos bitais.
  • Loginiai, poslinkio ir papildymo elementai yra trijų tipų operatoriai.
  • Bitų komplemento operatorius naudojamas išraiškos bitams pakeisti.

Įdomios straipsniai...