C-kieli‎ > ‎

Bittien käsittely

Yksi tärkeimmistä C-kielen ominaisuuksista on kyky käsitellä tavussa tai sanassa olevia bittejä yksitellen. C-kielen on suunniteltu ottavan assembly-kielen paikan useimmissa yhteyksissä ja siksi sillä on kyettävä tekemään myös hyvin koneläheistä ohjelmaa. Bitti-operaattoreilla testataan, asetetaan, siirretään bittejä tavuissa tai sanoissa, jotka ovat joko char- tai int-tyyppiä tai niiden variantteja:
  •  &    ja 
  •  |     tai
  •  ^   ehdoton tai
  • >>  siirto oikealle
  • <<  siirto vasemmalle


Bittioperaatiot kahdeksanbittisellä etumerkittömällä luvulla

TRUE true on muu kuin nolla, FALSE false  on nolla

Ja, And = & ,   Tai, Or =  | ,     Xor =   ^ ,  Negaatio = ~   ,    Shifting left,  Siirto vasemmalle  =  <<  ,    Shifting right,  Siirto oikealle =  >>


JA, AND, operaattori = &  ,  esimerkkejä 8 bittisilla luvuilla, b luvun perässä tarkoittaa sanaa binaari

1. esimerkki,  a = 255 & 15  =  1111 1111b & 0000 1111b  =  0000 1111b = 15  = 0xE  = 017
2. esimerkki   a = 255 & 1    =  1111 1111b & 0000 0001b  =  0000 0001b = 1    = 0x1   = 01
3. esimerkki   a = 2 & 1        =  0000 0010b & 0000 0001b  =  0000 0000b = 0    = 0x1   = 00
4. esimerkki   a = 3 & 1        =  0000 0011b & 0000 0001b  =  0000 0001b = 1
5. esimerkki   a = 3 & 2        =  0000 0011b & 0000 0010b  =  0000 0010b = 2


TAI , OR, operaattori |

1. esimerkki,  a = 0 | 1          =  0000 0000b | 0000 0001b  = 0000 0001b  = 1
2. esimerkki,  a = 2 | 1          =  0000 0010b | 0000 0001b  = 0000 0011b  = 3
3. esimerkki,  a = 4 | 8          =  0000 0100b | 0000 1000b  = 0000 1100b  = 12  =0 xC = 014
4. esimerkki,  a = 4 | 12        =  0000 0100b | 0000 1100b  = 0000 1100b  = 12


Ehdoton TAI , XOR, operaattori ^

1. esimerkki,  a = 0 ^ 1          =  0000 0000b ^ 0000 0001b  = 0000 0001b  = 1
2. esimerkki,  a = 1 ^ 1          =  0000 0001b ^ 0000 0001b  = 0000 0000b  = 0
3. esimerkki,  a = 2 ^ 1          =  0000 0010b ^ 0000 0001b  = 0000 0011b  = 3
4. esimerkki,  a = 3^ 1          =   0000 0011b ^ 0000 0001b  = 0000 0000b  = 2
5. esimerkki,  a = 4 ^ 8          =  0000 0100b ^ 0000 1000b  = 0000 1100b  = 12  =0 xC = 014
6. esimerkki,  a = 4 ^ 12        =  0000 0100b ^ 0000 1100b  = 0000 1000b  = 8


Negaatio, operaattori ~,  Negaatio-operaattori kääntää kaikki muuttujan bitit päinvastaiseksi

1.esimerkki,  a = 0  = 0000 0000;  operaatio a = ~a; nyt a= 1111 1111; lopputulos a = 255 = 0xFF
2.esimerkki   a = 1  = 0000 0001;  operaatio a =~a; nyt a=  1111 1110; lopputulos a = 254 =  0xFE
3.esimerkki   a = 12= 0000 1100;  operaatio a = ~a; nyt a= 1111 0011; lopputulos a = 243 = 0xF3
4.esimerkki   a = 15= 0000 1111;  operaatio a = ~a; nyt a= 1111 0000; lopputulos a = 240 = 0xF0


Siirto vasemmalle  Shifting left, operaattori <<

1. esimerkki  a=1=     0000 0001,  operaatio a = a<<1 ; nyt a= 0000 0010 ; lopputulos a = 2
2. esimerkki  a=128= 1000 0000,  operaatio a = a<<1 ; nyt a= 0000 0000 ; lopputulos a = 0
3. esimerkki  a=0 =    0000 0000,  operaatio a = a<<1 ; nyt a= 0000 0000 ; lopputulos a = 0


Siirto oikealle,  Shifting right, operaattori >>
1. esimerkki  a=1=     0000 0001,  operaatio a = a>>1 ; nyt a= 0000 0000 ; lopputulos a = 0
2. esimerkki  a=128= 1000 0000,  operaatio a = a>>1 ; nyt a= 0100 0000 ; lopputulos a = 64=0x40
3. esimerkki  a=0 =    0000 0000,  operaatio a = a>>1 ; nyt a= 0000 0000 ; lopputulos a = 0