C Operatori pa bitēm: AND, OR, XOR, Shift & Papildinājums (ar piemēru)

Satura rādītājs:

Anonim

Kas ir Bitwise operatori?

BITWISE OPERATORS tiek izmantoti datu manipulēšanai bitu līmenī, kurus sauc arī par bitu līmeņa programmēšanu. Bitiski darbojas ar vienu vai vairākiem bitu modeļiem vai bināriem cipariem to atsevišķo bitu līmenī. Tos izmanto skaitliskos aprēķinos, lai aprēķinu process būtu ātrāks.

Tālāk ir saraksts ar bitiem pa operatoriem, ko nodrošina “C” programmēšanas valoda:

Operators Nozīme
& Bitu paņēmiena UN operators
| Operators Bitwise OR
^ Ekskluzīvs VAI operators pa bitēm
~ Binārā komplementa operators ir unārs operators
<< Kreisās maiņas operators
>> Labās maiņas operators

Operatorus Bitwise nevar tieši attiecināt uz primitīviem datu tipiem, piemēram, float, double, utt. Vienmēr atcerieties vienu lietu, ka bitbit operatorus lielākoties izmanto ar veselu skaitļu datu tipu tā saderības dēļ.

Bitu ātruma loģiskie operatori strādā ar datiem pa bitiem, sākot ar mazāko nozīmīgo bitu, ti, LSB bitu, kas ir labākais bits, un virzās uz MSB (Vissvarīgākais bits), kas ir kreisākais bits.

Bitiski loģisko operatoru aprēķināšanas rezultāts ir parādīts zemāk dotajā tabulā.

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

Šajā apmācībā jūs uzzināsiet

  • Kas ir Bitwise operatori?
  • Bitu virzienā UN
  • Bitwise OR
  • Bitwise ekskluzīvs VAI
  • Bitu kustības operatori
  • Bitwise papildināt operators

Bitu virzienā UN

Šis ir viens no visbiežāk izmantotajiem loģiskajiem bitu ātruma operatoriem. To attēlo viena zīme (&). Operatora (&) abās pusēs ir ierakstīti divi veselas izteiksmes.

Operācijas bitu UN rezultāts ir 1, ja abu bitu vērtība ir 1; pretējā gadījumā rezultāts vienmēr ir 0.

Ņemsim vērā, ka mums ir 2 mainīgie op1 un op2, kuru vērtības ir šādas:

Op1 = 0000 1101Op2 = 0001 1001

Būs AND darbības rezultāts mainīgajiem lielumiem op1 un op2

Result = 0000 1001

Kā redzam, divi mainīgie tiek salīdzināti pa vienam. Ikreiz, kad bitu vērtība abos mainīgajos ir 1, tad rezultāts būs 1 vai arī 0.

Bitwise OR

To attēlo viena vertikālas joslas zīme (|). Operatora (|) katrā pusē ir ierakstīti divi veseli skaitļu izteicieni.

Operācijas bitu OR rezultāts ir 1, ja vismaz vienas izteiksmes vērtība ir 1; pretējā gadījumā rezultāts vienmēr ir 0.

Ņemsim vērā, ka mums ir 2 mainīgie op1 un op2, kuru vērtības ir šādas:

Op1 = 0000 1101Op2 = 0001 1001

VAI operācijas rezultāts ar mainīgajiem lielumiem op1 un op2 būs

Result = 0001 1101

Kā redzam, divi mainīgie tiek salīdzināti pa vienam. Ikreiz, kad bitu vērtība vienā no mainīgajiem ir 1, rezultāts būs 1 vai arī 0.

Bitwise ekskluzīvs VAI

To attēlo simbols (^). Operatora (^) abās pusēs ir ierakstītas divas veselas izteiksmes.

Operācijas bitu paņēmienam Exclusive-OR rezultāts ir 1, ja tikai viena no izteiksmēm ir vērtība 1; pretējā gadījumā rezultāts vienmēr ir 0.

Ņemsim vērā, ka mums ir 2 mainīgie op1 un op2, kuru vērtības ir šādas:

Op1 = 0000 1101Op2 = 0001 1001

VAI operācijas rezultāts ar mainīgajiem lielumiem op1 un op2 būs

Result = 0001 0100

Kā redzam, divi mainīgie tiek salīdzināti pa vienam. Ja vērtība 1 ir tikai vienam mainīgajam, rezultāts ir 0, citādi rezultāts būs 0.

Uzrakstīsim vienkāršu programmu, kas demonstrē bitu bitu loģiskos operatorus.

#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();}

Izeja:

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

Bitu kustības operatori

Bitu kustības operatorus izmanto, lai pārvietotu / pārvietotu bitu modeļus pa kreisi vai pa labi. Kreisais un labais ir divi maiņas operatori, ko nodrošina “C” un kas attēloti šādi:

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

Šeit,

  • operands ir vesela skaitļa izteiksme, kurai mums jāveic nobīdes operācija.
  • 'n' ir kopējais bitu pozīciju skaits, kas mums jānomaina vesela skaitļa izteiksmē.

Kreisās maiņas darbība pārvietos 'n' bitu skaitu uz kreiso pusi. Izteiksmē tiks parādīti kreisākie kreisie biti, un labajā pusē tiks aizpildīti n biti ar vērtību 0.

Pareizās maiņas operācija pārvietos 'n' bitu skaitu uz labo pusi. Labākie izteiksmes izteiksmē esošie “n” biti tiks parādīti, un kreisajā pusē tiks aizpildīta vērtība 0.

Piemērs: x ir vesela skaitļa izteiksme ar datiem 1111. Pēc maiņas darbības veikšanas rezultāts būs:

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

Maiņu operatorus var apvienot, pēc tam tos var izmantot, lai iegūtu datus no veselās izteiksmes. Uzrakstīsim programmu, lai parādītu bitu kustības operatoru izmantošanu.

#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;}

Izeja:

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

Pēc kreisās maiņas darbības veikšanas vērtība būs 80, kuras binārā ekvivalents ir 101000.

Pēc labās maiņas darbības veikšanas vērtība kļūs par 5, kuras binārā ekvivalents ir 000101.

Bitwise papildināt operators

Bitu papildinājumu sauc arī par sava komplementa operatoru, jo tam vienmēr ir nepieciešama tikai viena vērtība vai operands. Tas ir unārs operators.

Kad mēs izpildām papildinājumu jebkuriem bitiem, visi 1 ir 0 un otrādi.

Ja mums ir vesela skaitļa izteiksme, kas satur 0000 1111, pēc papildināšanas ar bitiem darbības vērtība kļūs par 1111 0000.

Bitu paņēmiena komersants tiek apzīmēts ar simbolu tilde (~).

Uzrakstīsim programmu, kas demonstrē bitu papildinājuma operatora ieviešanu.

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

Izeja:

Complement - Value of c is -11

Šeit ir vēl viena programma ar visu līdz šim apspriesto operu piemēru:

#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 );}

Pēc programmas apkopošanas un palaišanas tā rada šādu rezultātu:

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

Kopsavilkums

  • Operatori Bitwise ir īpašs operators, ko nodrošina “C.”
  • Tos izmanto bitu līmeņa programmēšanā.
  • Šie operatori tiek izmantoti, lai manipulētu ar vesela skaitļa izteiksmes bitiem.
  • Loģiskais, maiņas un papildinājums ir trīs veidu bitu ātruma operatori.
  • Bitformāta komplementa operators tiek izmantots, lai mainītu izteiksmes bitus.