Sei sulla pagina 1di 3

3/7/2014 bool, false, true

http://www.zator.com/Cpp/E3_2_1b.htm 1/3
Subir
Disponible la versin 6 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la informacin.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aqu.
Curso C++
[Home] [Inicio] [ndice]
3.2.1b bool, false, true
1 Sinopsis
La palabra-clave bool declara un tipo especial de variable, denominada booleana ( 0.1) que solo puede tener dos
valores: cierto y falso [1].
Nota: por razn de los valores que pueden adoptar (cierto/falso), a estas variables tambin se las denomina
variables lgicas.
2 Sintaxis
bool <identificador>;
3 Descripcin
Evidentemente el tipo bool est especialmente adaptado a para realizar comprobaciones lgicas; de hecho, todo el
lgebra de Boole se basa justamente en el uso de este tipo de variables de solo dos valores mutuamente excluyentes.
Por su parte, las palabras clave false y true son literales que tienen valores predefinidos (podemos considerar que son
objetos de tipo booleano de valor constante predefinido). false tiene el valor falso (numricamente es cero), true tiene el
valor cierto (numricamente es uno). Estos literales booleanos son Rvalues; no se les puede hacer una asignacin (no
pueden estar a la izquierda de una asignacin 2.1).
bool val = false; // declara val variable Booleana y la inicia
val = true; // ahora se cambia su valor (nueva asignacin)
true = 0; // Error!!
4 Conversin (modelado) de tipos:
Tenga en cuenta que los bool y los int son tipos distintos. Sin embargo, cuando es necesario, el compilador realiza una
conversin o modelado automtico ( ), de forma que pueden utilizarse libremente valores bool (true y false) junto con
valores int sin utilizar un modelado explcito. Por ejemplo:
int x = 0, y = 5;
if (x == false) printf("x falso.\n"); // Ok.
if (y == truee) printf("y cierto.\n"); // Ok.
if ((bool) x == false) printf("x falso.\n"); // Modelado innecesario
Estas conversiones entre tipos lgicos y numricos, son simplemente una concesin del C++ para
poder aprovechar la gran cantidad de cdigo C existente. Tradicionalmente en C se haca corresponder
falso con el valor cero y cierto con el valor uno (o distinto de cero).
El proceso consiste en que, en las expresiones aritmticas y lgicas, las variables booleanas son convertidas a enteros
(int). Las operaciones correspondientes (aritmticas y lgicas) se realizan con enteros, y finalmente el resultado
numrico es vuelto a bool segn las reglas de conversin siguientes:
Para convertir tipos bool a tipos int: false cero
true uno
Para convertir tipos int a un Rvalue tipo bool: cero false
cualquier otro valor true.
Para el resto de variables distintas de int (aunque sean numricas), antes de utilizarlas en expresiones lgicas (
4.9.9), es necesario un modelado ("casting"). Ejemplo:
float x = 0
C++
3/7/2014 bool, false, true
http://www.zator.com/Cpp/E3_2_1b.htm 2/3
long y = 5;
int *iptr = 0;
if (x == false) printf("x falso"); // Error.
if (y == truee) printf("y cierto"); // Error.
if (iptr == false) printf("Puntero nulo"); // Error.
if ((bool) x == false) printf("x falso"); // Ok.
if ((bool) y == true) printf("y cierto"); // Ok.
if ((bool) iptr == false) printf("Puntero nulo"); // Ok.
Las reglas son anlogas a las anteriores:
Para convertir un Rvalue tipo bool a un Rvalue numrico: false cero
true uno.
Para convertir tipos aritmticos (enumeraciones, punteros o punteros a miembros de clases) a un Rvalue de tipo
bool, la regla es que cualquier valor cero; puntero nulo, o puntero a miembro de clase nulo, se convierte a
false. Cualquier otro valor se convierte a true.
5 Los tipos bool y los literales false y true se pueden utilizar para realizar comprobaciones lgicas. En el ejemplo que
sigue se muestra como hacer test booleanos con bool, true, y false:
#include <iostream>
using std::cout;
using std::endl;

bool func() { // Func devuelve un tipo bool
return NULL; /* NULL es convertido a Booleano (false)
return false; esta sentencia es idntica a la anterior */
}

int main() { // ==============
bool val = false; // val es declarada tipo bool e iniciada
int i = 1; // i es tipo int (no booleano)
int *iptr = 0; // puntero nulo, equivale a: int *iptr = NULL
float j = 1.01; // j es tipo float (no booleano)

// Test para enteros
if (i == true) cout << "Cierto: el valor es 1" << endl;
if (i == false) cout << "Falso: el valor es 0" << endl;

// Test para punteros
if ((bool) iptr == false) cout << "Puntero no vlido" << endl;
// Para comprobar el valor j se "modela" a tipo bool.
if ((bool) j == true) cout << "el Booleano j es cierto" << endl;
// Test de funcin devolviendo Booleano
val = func();
if (val == false)
cout << "func() devuelve falso.";
if (val == true)
cout << "func() devuelve cierto.";
return false; // false es convertido a 0 (int)
}
Salida del programa:
Cierto: el valor es 1
Puntero no vlido
el Booleano j es cierto
func() devuelve falso
6 El lenguaje C++ tiene operadores y sentencias en las que se exige la presencia de un tipo bool, son las siguientes:
Operadores lgicos ( 4.9.8) AND (&&) OR (||) NOT (!). Producen un resultado booleano, y sus operandos son
tambin valores lgicos o asimilables a ellos (los valores numricos son asimilados a true o false segn su valor).
Operadores relacionales ( 4.9.12) <, >, <=, >=. Aceptan diversos tipos de operando, pero el resultado es de
tipo booleano.
Expresin condicional en las sentencias if ( 4.10.2) y en las iteraciones for, while y do..while ( 4.10.3).
En todos estos casos, la sentencia condicional produce un bool como resultado.
El primer operando del operador ? : ( 4.9.6), es convertido a bool.
Inicio.
[1] El tipo bool es una incorporacin reciente del lenguaje (1998), que tiene antecedentes en muchos otros lenguajes de
programacin. Por ejemplo Pascal.
3/7/2014 bool, false, true
http://www.zator.com/Cpp/E3_2_1b.htm 3/3
Inicio
|ndice| Copyright 1990-2014 Zator Systems.
Play Free Games.

Potrebbero piacerti anche