C # Bittikohtaiset operaattorit: AND, OR, XOR, täydennys- ja vaihtotoiminnot

Tässä opetusohjelmassa opimme yksityiskohtaisesti C #: n bitti- ja bittioperaattoreista. C # tarjoaa 4 bitti- ja 2 bittioperaattoria.

Bitti- ja bittisiirto-operaattoreita käytetään suorittamaan bittitason operaatiot kokonaisluvulle (int, pitkä jne.) Ja loogiselle datalle. Näitä operaattoreita ei yleisesti käytetä tosielämän tilanteissa.

Jos haluat tutustua lisää, käy bittioperaatioiden käytännön sovelluksissa.

C #: ssä saatavat bitti- ja bittisiirtoperaattorit on lueteltu alla.

Luettelo C # -bittikohtaisista operaattoreista
Operaattori Operaattorin nimi
~ Bittikohtainen täydennys
& Bittikohtaisesti JA
| Bittiä TAI
^ Bittikohtaisesti yksinomainen TAI (XOR)
<< Bitti vasemmalle -vaihto
>> Bittisuuntainen oikea vaihto

Bittiä TAI

Bittikohtaisesti TAI-operaattoria edustaa |. Se suorittaa bittiä TAI-operaation kahden operandin vastaavilla biteillä. Jos jompikumpi biteistä on 1, tulos on 1. Muuten tulos on 0.

Jos operandit ovat tyypiltään bool, bittiä TAI-operaatio vastaa niiden välistä loogista TAI-operaatiota.

Esimerkiksi,

 14 = 00001110 (binäärisenä) 11 = 00001011 (binäärisenä)

Bittikohtainen ORtoiminta välillä 14 ja 11:

 00001110 00001011 -------- 00001111 = 15 (desimaalilla)

Esimerkki 1: bittiä kohti OR

 using System; namespace Operator ( class BitWiseOR ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber | secondNumber; Console.WriteLine("(0) | (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Kun suoritamme ohjelmaa, tulos on:

14 | 11 = 15

Bittikohtaisesti JA

Bit-operaattoria AND edustaa &. Se suorittaa bittiä JA-operaatiota kahden operandin vastaavilla biteillä. Jos jompikumpi biteistä on 0, tulos on 0. Muuten tulos on 1.

Jos operandit ovat tyypiltään bool, bittiviiva JA-operaatio vastaa niiden välistä loogista JA-operaatiota.

Esimerkiksi,

 14 = 00001110 (binäärisenä) 11 = 00001011 (binäärisenä)

Pyörimisnopeus JA toiminta välillä 14 ja 11:

 00001110 00001011 -------- 00001010 = 10 (desimaalilla)

Esimerkki 2: Bittiviiva JA

 using System; namespace Operator ( class BitWiseAND ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber & secondNumber; Console.WriteLine("(0) & (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Kun suoritamme ohjelmaa, tulos on:

 14 & 11 = 10

Bitteittäin XOR

Bitwise XOR -operaattoria edustaa ^. Se suorittaa bittikohtaisen XOR-operaation kahden operandin vastaavilla biteillä. Jos vastaavat bitit ovat samat , tulos on 0. Jos vastaavat bitit ovat erilaisia , tulos on 1.

Jos operandit ovat tyypiltään bool, bittikohtainen XOR-operaatio vastaa niiden välistä loogista XOR-operaatiota.

Esimerkiksi,

 14 = 00001110 (binäärisenä) 11 = 00001011 (binäärisenä)

Bittikohtainen XOR-toiminta välillä 14 ja 11:

 00001110 00001011 -------- 00000101 = 5 (desimaalilla)

Jos haluat lisätietoja Bitwise XOR: n käytöstä, käy The Magic of XOR -sivulla

Esimerkki 3: Bittikohtainen XOR

 using System; namespace Operator ( class BitWiseXOR ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber^secondNumber; Console.WriteLine("(0) (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Kun suoritamme ohjelmaa, tulos on:

 14 11 = 5

Bittikohtainen täydennys

Bitwise Complement -operaattoria edustaa ~. Se on unaarinen operaattori, eli toimii vain yhdellä operandilla. ~Operaattori kääntää kunkin bittiä eli muuttuu 1-0 ja 0-1.

Esimerkiksi,

 26 = 00011010 (binaarina)

Bittikohtainen täydennysoperaatio 26:

 ~ 00011010 = 11100101 = 229 (desimaalilla)

Esimerkki 4: Täydennys bittikohtaisesti

 using System; namespace Operator ( class BitWiseComplement ( public static void Main(string() args) ( int number = 26, result; result = ~number; Console.WriteLine("~(0) = (1)", number, result); ) ) ) 

Kun suoritamme ohjelmaa, tulos on:

 ~ 26 = -27

Saimme - 27tuotoksena, kun odotimme 229. Miksi näin tapahtui?

Se tapahtuu, koska binääriarvo, 11100101jonka odotamme olevan, 229on itse asiassa 2: n komplementtiesitys -27. Negatiiviset luvut tietokoneessa esitetään 2: n komplementtiesityksessä.

Mikä tahansa kokonaisluku n, 2: n komplementti non -(n+1).

2: n täydennysosa
Desimaali Binääri 2: n täydennysosa
0 00000000 - (11111111 + 1) = -00000000 = -0 (desimaalilla)
1 00000001 - (11111110 + 1) = -11111111 = -256 (desimaalilla)
229 11100101 - (00011010 + 1) = -00011011 = -27

Ylivuotoarvot jätetään huomiotta 2: n täydennysosassa.

Bittien komplementti 26on 229 (desimaalilla) ja 2: n komplementti 229on -27. Siksi tulos on -27sijasta 229.

Bitti vasemmalle -vaihto

Vasemman siirtymän operaattoria bittiä kohti edustaa <<. <<Operaattori siirtyy numeron vasemmalle tietyn määrän bittejä. Nollat ​​lisätään vähiten merkitseviin bitteihin.

Desimaalin tarkkuudella se vastaa

 num * 2bittiä

Esimerkiksi,

 42 = 101010 (binäärimuodossa)

Nostokytkentä bittinopeudella 42:

 42 << 1 = 84 (binäärisenä 1010100) 42 << 2 = 168 (binäärisenä 10101000) 42 << 4 = 672 (binäärisenä 1010100000)

Esimerkki 5: Vasenkätinen siirtymä bittiä kohti

 using System; namespace Operator ( class LeftShift ( public static void Main(string() args) ( int number = 42; Console.WriteLine("(0)<<1 = (1)", number, number<<1); Console.WriteLine("(0)<<2 = (1)", number, number<<2); Console.WriteLine("(0)<<4 = (1)", number, number<<4); ) ) ) 

Kun suoritamme ohjelmaa, tulos on:

 42 << 1 = 84 42 << 2 = 168 42 << 4 = 672

Bittisuuntainen oikea vaihto

Vasemman siirtymän operaattoria bittiä kohti edustaa >>. >>Operaattori siirtyy numeron oikealle tietyn määrän bittejä. Ensimmäinen operandi siirretään oikealle toisen operandin määrittelemän bittimäärän avulla.

Desimaalin tarkkuudella se vastaa

 kerros (numero / 2 bittiä)

Esimerkiksi,

 42 = 101010 (binäärimuodossa)

Nostokytkentä bittinopeudella 42:

 42 >> 1 = 21 (binäärisenä 010101) 42 >> 2 = 10 (binäärisenä 001010) 42 >> 4 = 2 (binäärisenä 000010)

Esimerkki 6: Oikea siirtymä bittiä kohti

 using System; namespace Operator ( class LeftShift ( public static void Main(string() args) ( int number = 42; Console.WriteLine("(0)>>1 = (1)", number, number>>1); Console.WriteLine("(0)>>2 = (1)", number, number>>2); Console.WriteLine("(0)>>4 = (1)", number, number>>4); ) ) ) 

Kun suoritamme ohjelmaa, tulos on:

 42 >> 1 = 21 42 >> 2 = 10 42 >> 4 = 2

Mielenkiintoisia artikkeleita...