El tipus bool
serveix per representar valors lògics, també anomenats booleans. Només
hi ha dos possibles valors, fals i cert, que en C++ es representen amb els
literals false
i true
i en Python amb els literals False
i True
.
Hi ha dues operacions binàries (és a dir, amb dos operands) fonamentals:
la disjunció (amb l'operador or
)
i la conjunció (amb l'operador and
).
També hi ha una operació unària (sobre un sol booleà):
la negació (amb l'operador not
).
Les taules de veritat següents mostren tots
els resultats possibles d'aquestes operacions.
- Taula de veritat de la negació:
a |
not a |
---|---|
false |
true |
true |
false |
- Taula de veritat de la disjunció:
a |
b |
a or b |
---|---|---|
false |
false |
false |
false |
true |
true |
true |
false |
true |
true |
true |
true |
- Taula de veritat de la conjunció:
a |
b |
a and b |
---|---|---|
false |
false |
false |
false |
true |
false |
true |
false |
false |
true |
true |
true |
També es pot comprovar si dos booleans són iguals,
o si són diferents amb els operadors ==
i !=
,
però això és mal estíl, ja que són innecessaris.
Per exemple, si trobat
és un booleà, el fragment
bool trobat = ... ;
if (trobat == true) ...
es millor rescriure'l aixi:
bool trobat = ... ;
if (trobat) ...
Similarment,
if (trobat == false)
és pitjor estil que
if (not trobat)
També, és confús utilitzar identificadors negats per a les variables
booleanes: És més senzill entendre la condició gela
que not no_gela
.
Les lleis de De Morgan son un parell de transformacions fonamentals de
fórmules que són essencials a l'hora de raonar en informàtica. Escrita en
C++, la primera llei de De Morgan estableix que not (a or b)
és equivalent a
(not a) and (not b)
. La segona llei estableix que not (a and b)
és
equivalent a (not a) or (not b)
. La demostració d'ambdues lleis és
ben senzilla utilitzant taules de veritat.
Així, podem veure que el contrari de "gela i és fosc"
és "no gela o no és fosc"
, i no pas
"no gela i no és fosc"
.
Fixeu-vos que ja utilitzaveu els booleans sense saver-ho: El resultat dels operadors relacionals
(<
, <=
, ==
, !=
, >=
i >
) és un bool
! I les condicions que s'escriuen als if
s i
while
s han de ser de tipus boolèa.
Per compatibilitat amb el llenguatge C, del qual C++ és una evolució,
els operador not
, or
i and
també es poden escriure !
, ||
i &&
, respectivament.
Però com que aquests signes són menys intuïtius i menys llegibles,
no és recomanable usar-los.