bitenkénti Operatorok C-ben: ÉS, VAGY, XOR, Shift & Kiegészítés

⚡ Okos összefoglaló

A C nyelvben a bitenkénti operátorok az adatokat bitenként manipulálják, ÉS, VAGY, XOR, komplementer és eltolás műveleteket használva egész operandusokon a gyorsabb számítások végrehajtásához, a jelzők csomagolásához és a hardver vezérléséhez alacsony szintű és beágyazott programozásban.

  • 🧮 Operators: Hat operátor — ÉS (&), VAGY (|), XOR (^), komplementer (~), balra eltolás (<<), jobbra eltolás (>>) — apránként működik.
  • 🔗 ÉS ÉS VAGY: Az & eredmény csak akkor 1, ha mindkét bit 1; az | eredménye 1, ha bármelyik bit 1.
  • 🔀 XOR: A ^ eredmény 1, ha pontosan egy bit 1, ami hasznos a bitek közötti váltáshoz és a cseréhez.ping értékeket.
  • ↔️ Shifts: A << és >> operátorok balra vagy jobbra csúsztatják a biteket, kettő hatványaival szorozva vagy osztva.
  • 🔁 Kiegészítés: A ~ operátor minden bitet átfordít, így a 0000 1111 helyett 1111 0000 lesz.
  • 🤖 MI segítség: A mesterséges intelligencia asszisztensek és a GitHub Copilot gyorsan generálják és magyarázzák el a bitmaszkokat és az eltolási logikát.

bitenkénti OperaC-ben szereplő torok

Mik azok a Bitwise Operators?

bitenkénti OperaA programozókat (tors) az adatok bit szintű manipulálására használják, más néven bitszintű programozásra. A bitenkénti műveletek egy vagy több bitmintán vagy bináris számon működnek az egyes bitek szintjén. Numerikus számításokban használják őket a számítási folyamat felgyorsítására.

Az alábbiakban a 'C' programozási nyelv által biztosított bitenkénti operátorok listája található:

Operator Jelentés
& Bitenkénti ÉS operátor
| Bitenkénti VAGY operátor
^ Bitenkénti kizárólagos VAGY operátor
~ A bináris egyes komplementere OperaA tor egy unáris operátor
<< Bal váltókezelő
>> Jobb váltókezelő

A bitenkénti operátorok nem alkalmazhatók közvetlenül primitív adattípusokra, mint például a float, double stb. Mindig emlékezz arra, hogy a bitenkénti operátorokat többnyire a következővel használják: egész adattípus a kompatibilitása miatt.

A bitenkénti logikai operátorok bitenként dolgoznak az adatokon, kezdve a legkisebb jelentőségű bittől, azaz az LSB bittől, amely a jobb szélső bit, és az MSB (Most Significant Bit) felé haladva, amely a bal szélső bit.

A bitenkénti logikai operátorok számításának eredményét az alábbi táblázat mutatja.

x y x & y x | és x^y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Bitálisan ÉS

Ez az egyik leggyakrabban használt logikai bitenkénti operátor. Ezt egyetlen „és” jel (&) jelöli. Két egész kifejezést írunk az (&) operátor mindkét oldalára.
A bitenkénti ÉS művelet eredménye 1, ha mindkét bit értéke 1; egyébként az eredmény mindig 0.

Tekintsük, hogy van 2 op1 és op2 változónk a következő értékekkel:

Op1 = 0000 1101
Op2 = 0001 1001

Az AND művelet eredménye az op1 és op2 változókon lesz

Result = 0000 1001

Amint látjuk, két változót bitenként hasonlítanak össze. Ha a bit értéke mindkét változóban 1, akkor az eredmény 1 vagy 0 lesz.

Bitenként VAGY

Egyetlen függőleges oszlopjel (|) ábrázolja. Két egész kifejezést írunk a (|) operátor mindkét oldalára.

A bitenkénti VAGY művelet eredménye 1, ha legalább az egyik kifejezés értéke 1; egyébként az eredmény mindig 0.

Tekintsük, hogy van 2 op1 és op2 változónk a következő értékekkel:

Op1 = 0000 1101
Op2 = 0001 1001

Az op1 és op2 változókra vonatkozó VAGY művelet eredménye a következő lesz

Result = 0001 1101

Amint látjuk, két változót bitenként hasonlítanak össze. Ha az egyik változóban egy bit értéke 1, akkor az eredmény 1 vagy 0 lesz.

Bitenkénti exkluzív VAGY

Egy szimbólum (^) jelöli. Két egész kifejezést írunk a (^) operátor mindkét oldalára.

A bitenkénti Exclusive-OR művelet eredménye 1, ha csak az egyik kifejezés értéke 1; egyébként az eredmény mindig 0.

Tekintsük, hogy van 2 op1 és op2 változónk a következő értékekkel:

Op1 = 0000 1101
Op2 = 0001 1001

Az XOR művelet eredménye az op1 és op2 változókon lesz

Result = 0001 0100

Amint látjuk, két változót bitenként hasonlítanak össze. Ha csak egy változóban van 1, akkor az eredmény 0, különben 0 lesz az eredmény.

Írjunk egy egyszerű programot, amely bitenkénti logikai operátorokat mutat be.

#include <stdio.h>
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();
}

output:

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

Bitenkénti eltolási operátorok

A bitenkénti eltoló operátorok a bitminták balra vagy jobbra mozgatására/eltolására szolgálnak. A balra és jobbra két eltoló operátort a 'C' biztosít, amelyeket a következőképpen jelölünk:

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

Itt,

  • az operandus egy egész kifejezés, amelyen el kell végeznünk a shift műveletet.
  • Az 'n' azoknak a bithelyeknek a száma, amelyeket el kell tolnunk az egész kifejezésben.

A bal oldali eltolás művelet az 'n' számú bitet a bal oldalra tolja. A kifejezés bal szélső bitjei kiugrik, és n bit 0 értékű a jobb oldalon.

A jobb oldali eltolás művelet az 'n' számú bitet a jobb oldalra tolja. A kifejezés jobb szélső 'n' bitjei kiugrik, és a 0 érték a bal oldalon lesz kitöltve.

Példa: x egy egész kifejezés 1111 adattal. A shift művelet végrehajtása után az eredmény a következő lesz:

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

ShiftAz s operátorok kombinálhatók, majd felhasználhatók extract az egészértékű kifejezésből származó adatokat. Írjunk egy programot, amely bemutatja a bitenkénti eltolási operátorok használatát.

#include <stdio.h>
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;
}

output:

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

A balra eltolás művelet végrehajtása után az érték 80 lesz, melynek bináris megfelelője 101000.

A jobb eltolási művelet végrehajtása után az érték 5 lesz, amelynek bináris megfelelője 000101.

Bitenkénti komplement operátor

A bitenkénti kiegészítést komplement operátornak is nevezik, mivel mindig csak egy értéket vagy egy operandust vesz fel. Ez egy unáris operátor.

Ha bármely biten komplementet hajtunk végre, az 1-esek 0-vá válnak, és fordítva.

Ha van egy egész kifejezésünk, amely 0000 1111-et tartalmaz, akkor bitenkénti komplementművelet végrehajtása után az érték 1111 0000 lesz.

A bitenkénti komplement operátort tilde (~) szimbólum jelöli.

Írjunk egy programot, amely bemutatja a bitenkénti komplement operátor megvalósítását.

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

output:

Complement - Value of c is -11

Íme egy másik program, az eddig tárgyalt operátorok egy példájával:

#include <stdio.h>
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;          /*-49 = 11001111 */
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 );}

A program összeállítása és futtatása után a következő eredményt adja:

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

GYIK

A bitenkénti ÉS (&) függvény egyedi biteken dolgozik, és egész számot ad vissza, míg a logikai ÉS (&&) függvény egész kifejezéseket vizsgál, és egyetlen igaz vagy hamis logikai értéket ad vissza.

Shift 1 maszk létrehozásához: állítsd be az | (1 << n) értékkel, töröld az & ~(1 << n) értékkel, és válts át az ^ (1 << n) értékkel.

Egy n-nel balra eltolás egy előjel nélküli értéket szoroz meg kettővel, majd n-re emeli; egy jobbra eltolás osztja ezzel, ezért a fordítóprogramok a sebesség növelése érdekében használják az eltolásokat.

Ellenőrizd az & 1 számot. A legalacsonyabb bit 1-et ad vissza páratlan értékek esetén és 0-t páros értékek esetén, gyorsabban, mint a modulus operátor.

A beágyazott firmware, illesztőprogramok, kriptográfia, tömörítés, grafika és hálózatépítés ezeket használja a jelzők csomagolására, hardverregiszterek olvasására, jogosultsági maszkok létrehozására és a számtani műveletek felgyorsítására.

Shift Az operátorok szorosabbak, mint a relációs operátorok, míg az &, ^ és | az egyenlőség alatt, de a logikai && és || felett helyezkednek el, ezért a biztonság kedvéért zárójelbe kell tenni őket.

Igen. Egy mesterséges intelligencia által vezérelt kódolóasszisztens maszkokat ír és átvált egy promptból, elmagyarázza a negatív komplementereket, és bináris példákat működő C kóddá alakít. Mindig tesztelje az eredményt.

GitHub másodpilóta Bitmaszk makrókat, bitkészlet-segítőket és -törlési segédeket, valamint megjegyzésből származó matematikai műveleteket javasol; összehasonlítja a kiegészítéseket a bit elrendezésével.

Foglald össze ezt a bejegyzést a következőképpen: