Yksi C- kielen vahvoista piirteistä erityisesti alemman tason ohjelmoinnissa on mahdollisuus käyttää bittitason operaattoreita.
Loogisia operaattoreita &&,|| ja ! ei pidä sotkea vastaaviin bittitason operaattoreihin:
& bittitason AND | bittitason OR ^ bittitason XOR ~ bittitason NOT << rullaus vasemmalle, 0 sisään oikealta >> rullaus oikealle, 0 sisään vasemmalta (unsigned int ja int >=0) , voi tulla 0 tai 1 sisään vasemmalta (int joka <0) (laiteriippuva, esim. Turbo C:ssä tulee 1).
Bittitason operaattoreita voidaan käyttää vain kokonaisluvuiksi muuttuviin operandeihin.
Operaattoreiden toimintaa voidaan kuvata seuraavasti. Olkoon meillä sijoitukset a=5; b=14; . Kuvitellaan kokonaisluvut tilapäisesti 8 bitin mittaisiksi (oikeasti yleensä 16 tai 32 bittiä):
|
Binäärisenä
|
desim.
|
|
a
|
0000 0101
|
5
|
|
b
|
0000 1110
|
14
|
|
a
& b
|
0000 0100
|
4
|
|
a
| b
|
0000 1111
|
15
|
|
a
^ b
|
0000 1011
|
11
|
|
~a
|
1111 1010
|
-6
|
|
a<<2
|
0001 0100
|
20
|
|
b>>3
|
0000 0001
|
1
|
|
a
&& b
|
0000 0001
|
1
|
Toimii
vain C:ssä
|
a
|| b
|
0000 0001
|
1
|
Toimii
vain C:ssä
|
!a
|
0000 0000
|
0
|
Toimii
vain C:ssä
|
Huomautus! Tyypillinen ohjelmointivirhe on sotkea keskenään loogiset ja bittitason operaattorit. Javassa onneksi kääntäjä tekee tämän vaikeammaksi.
int a=5, b=2; if ( a != 0 && b != 0 ) tulosta("On ne!"); if ( (a&b) != 0) tulosta("Ei ne ookkaan!"); if ( a != 0 ) tulosta("a on!"); if ( ~b != 0) tulosta("b ehkä on!"); if ( !(b == 0) ) tulosta("b ei ole!");