2.5.4 Loogiset operaatiot

Usein törmätään tilanteisiin, joissa vaadittua ehtoa ei pystytä ilmaisemaan yhdellä ainoalla vertailulausekkeella. Jos esimerkiksi määritellään teini-ikäisen määrittävä ehto (ikä 13-19), olisi pystyttävä ilmaisemaan, että iän tulee täyttää samanaikaisesti kaksi ehtoa

Ehtoja voidaan yhdistellä loogisilla operaatioilla. C++-kielen tuntemat loogiset operaattorit ovat

!

ei (not), looginen negaatio

&&

ja (and), looginen tulo

||

tai (or), looginen summa

Kun kaksi vertailua yhdistetään ja-operaattorilla, on koko lausekkeen arvo tosi vain, jos molemmat vertailut ovat tosia. Näin ollen muuttujan ika avulla voidaan antaa teini-iän määrittelevä ehto

(13 <= ika && ika <= 19)   /* EI!: 13 <= ika <= 19 */

Tai-operaatio puolestaan antaa arvon tosi, jos jompi kumpi (tai molemmat) yhdistettävistä ehdoista on tosi.

Ei-operaatiota voidaan käyttää mm. seuraavasti:

!(ika < 18)

Ehto toteutuu silloin, kun ika ei ole alle 18. Toisena esimerkkinä on ehto

!(ika==18)

joka toteutuu silloin kun ika ei ole 18. Käytännössä em. ehto voitaisiin korvata käyttämällä eri suuri kuin -vertailuoperaattoria:

(ika!=18)

C++-kielessä ehtolausekkeita ei välttämättä suoriteta loppuun saakka, jos lausekkeen alkuosa jo määrää lopputuloksen: Voidaan esimerkiksi huoletta kirjoittaa ehto

(k != 0 && 100/k > 4)

ilman nollalla jaon vaaraa, sillä (kokonaisluku)muuttujan k ollessa nolla määräytyy ehtolauseen arvo kokonaisuudessaan ensimmäisestä vertailusta, joten lauseketta 100/k ei edes yritetä laskea.

Oletetaan että ika muuttuja saa arvot 6, 8, 17, 18, 20, 25, 55, 64, 65 ja 99. Millä arvoilla toteutuvat seuraavat ehtolauseet?
(ika < 18 || 64 < ika)
(ika == 18 ||ika == 65)
(ika != 18 && ika != 65)
(18 < ika && ika < 65)
(18 < ika && ika < 17)