Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

10.4 Bittitason operaattorit

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.

Tehtävä 10.5 Loogiset/bittitason operaattorit

Mitä tulostaa seuraava ohjelman osa.
	      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!");

Tehtävä 10.6 Luku parilliseksi

Kirjoita funktio parilliseksi, joka palauttaa parametrinään olevan kokonaisluvun pienemmäksi parilliseksi luvuksi "katkaistuna". Eli esim. 3 - > 2. 5 - > 4. 4 - > 4.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys