C Bittikohtaiset operaattorit: JA, TAI, XOR, täydennys- ja vaihtotoiminnot

Tässä opetusohjelmassa opit kaikista 6 b-operaattorista C-ohjelmoinnissa esimerkkien avulla.

Aritmeettis-logiikkayksikössä (joka on CPU: n sisällä) matemaattiset operaatiot, kuten: yhteenlasku, vähennyslasku, kertolasku ja jako, suoritetaan bittitasolla. Bittitason operaatioiden suorittamiseksi C-ohjelmoinnissa käytetään bittikohtaisia ​​operaattoreita.

Operaattorit Operaattoreiden merkitys
& Bittikohtaisesti JA
| Bittiä TAI
^ Bitteittäin XOR
~ Bittikohtainen täydennys
<< Vaihda vasemmalle
>> Vaihda oikealle

Bittikohtaisesti JA operaattori &

Bittiviivan AND lähtö on 1, jos kahden operandin vastaavat bitit ovat 1. Jos operandin jompikumpi bitti on 0, vastaavan bitin tulos arvioidaan 0: ksi.

Oletetaan kahden kokonaisluvun 12 ja 25 bittikohtainen toiminta.

 12 = 00001100 (binaarina) 25 = 00011001 (binaarina) 12- ja 25-bittitoiminta 00001100 & 00011001 ________ 00001000 = 8 (desimaalina)

Esimerkki # 1: Bitteittäin JA

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; ) 

Tuotos

 Lähtö = 8

Bittitason TAI-operaattori |

Bittien OR lähtö on 1, jos ainakin yksi vastaava bitti kahdesta operandista on 1. C-ohjelmoinnissa bittitunnusta TAI-operaattoria merkitään |.

12 = 00001100 (binaarina) 25 = 00011001 (binaarina) bittiä TAI 12: n ja 25: n toiminta 00001100 | 00011001 ________ 00011101 = 29 (desimaalilla)

Esimerkki # 2: bittiä TAI

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; ) 

Tuotos

 Tuotos = 29

Bittikohtainen XOR (yksinomainen TAI) -operaattori ^

Bittikohtaisen XOR-operaattorin tulos on 1, jos kahden operandin vastaavat bitit ovat vastakkaisia. Sitä merkitään ^.

 12 = 00001100 (binäärimuodossa) 25 = 00011001 (binäärimuodossa) 12: n ja 25: n bittinen XOR-operaatio 00001100 00011001 ________ 00010101 = 21 (desimaalina)

Esimerkki # 3: bittiä kohti XOR

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )

Tuotos

 Tuotos = 21

Bittikohtainen operaattori ~

Bittikohtainen kohteliaisuusoperaattori on unaarinen operaattori (toimii vain yhdellä operandilla). Se muuttuu 1: stä 0: een ja 0: sta 1. Sitä merkitään ~.

 35 = 00100011 (binäärimuodossa) Täydennetään bittikohtaisesti arvoa 35 ~ 00100011 ________ 11011100 = 220 (desimaalina) 

Kierrä C-ohjelmoinnissa bittiä täydentävä operaattori

35 (~ 35) bittikommentti on -36 220: n sijaan, mutta miksi?

Minkä tahansa kokonaisluvun n kohdalla n: n bittikommentti on -(n+1). Tämän ymmärtämiseksi sinulla on oltava tieto 2: n täydennyksestä.

2: n täydennysosa

Kahden komplementti on operaatio binääriluvuilla. Luvun 2 komplementti on yhtä suuri kuin luvun + 1 komplementti. Esimerkiksi:

 Desimaali Binaarinen 2: n komplementti 0 00000000 - (11111111 + 1) = -00000000 = -0 (desimaali) 1 00000001 - (11111110 + 1) = -11111111 = -256 (desimaali) 12 00001100 - (11110011 + 1) = -11110100 = -244 (desimaali) 220 11011100 - (00100011 + 1) = -00100100 = -36 (desimaali) Huom: Ylivuoto jätetään huomiotta laskettaessa 2: n komplementtia. 

35: n bittikommentti on 220 (desimaalilla). 2: n komplementti 220: sta on -36. Siksi lähtö on -36 220: n sijaan.

Minkä tahansa luvun N bittikommentti on - (N + 1). Näin:

 bitin N = ~ N komplementti (edustettuna 2: n komplementtimuodossa) 2'-komplementti ~ N = - (~ (~ N) +1) = - (N + 1) 

Esimerkki # 4: Täydennetään bittiä kohti

 #include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; ) 

Tuotos

 Lähtö = -36 Lähtö = 11

Vaihto-operaattorit C-ohjelmoinnissa

C-ohjelmoinnissa on kaksi vuoro-operaattoria:

  • Oikean vaiheen operaattori
  • Vasemman vaiheen operaattori.

Oikea vaihde

Oikean siirtymän operaattori siirtää kaikki bitit oikealle tietyllä määrällä määritettyjä bittejä. Sitä merkitään >>.

 212 = 11010100 (binäärisenä) 212 >> 2 = 00110101 (binäärisenä) (Oikea siirtymä kahdella bitillä) 212 >> 7 = 00000001 (binäärisenä) 212 >> 8 = 00000000212 >> 0 = 11010100 (ei siirtoa) 

Vasemman vaiheen operaattori

Vasemman vaiheen operaattori siirtää kaikki bitit vasemmalle tietyllä määrällä määritettyjä bittejä. Vasemman siirto-operaattorin vapauttamat bittiasennot täytetään arvolla 0. Vasemman siirto-operaattorin symboli on <<.

 212 = 11010100 (binäärisenä) 212 << 1 = 110101000 (binäärisenä) (Vasen siirtymä yhdellä bitillä) 212 << 0 = 11010100 (Vaihto 0: lla) 212 << 4 = 110101000000 (binäärisenä) = 3392 (desimaalilla) )

Esimerkki # 5: Vaihto-operaattorit

 #include int main() ( int num=212, i; for (i=0; i>i); printf(""); for (i=0; i<=2; ++i) printf("Left shift by %d: %d", i, num< 
 Right Shift by 0: 212 Right Shift by 1: 106 Right Shift by 2: 53 Left Shift by 0: 212 Left Shift by 1: 424 Left Shift by 2: 848 

Mielenkiintoisia artikkeleita...