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

a || b
0000 0001
1

!a
0000 0000
0

Huomautus! Tyypillinen ohjelmointivirhe on sotkea keskenään loogiset ja bittitason operaattorit:

Tehtävä 10.95 Loogiset/bittitason operaattorit

Mitä tulostaa seuraava ohjelman osa.
	{ /* binoper.c */
	  int a=5; b=2;
	  if ( a&&b ) printf("On ne!\n");
	  if ( a&b )  printf("Ei ne ookkaan!\n");
	  if ( a ) printf("a on!\n");
	  if ( ~b ) printf("b ehkä on!\n");
	  if ( !b ) printf("b ei ole!\n");
	}

Tehtävä 10.96 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