在现实生活中经常会问或者被问答案是“是”或者“不是“的问题。如:苹果是水果么? 是 你喜欢竹笋么? 不
现在考虑一种相似的说法。苹果是水果。这一句是对还是错?当然是对的。我喜欢竹笋。错
这些句子只有两种结果:true/false yes/no.因为这一类的句子太多了,所以程序员专门定义了一种类型:boolean类型。
boolean 变量:
boolean变量只有两种可能的值:true(1),false(0)
为了定义一个boolean变量我们使用bool关键字。
bool b;
初始化或者赋值的时候,我们使用true或者false
bool b1 = true; // copy initialization
bool b2(false); // direct initialization
bool b3 { true }; // uniform initialization (C++11)
b3 = false; // assignment
就像-号可以标志数值的正负一样,!可以将true变成false,将false变成true。
bool b1 = !true; // b1 will have the value false
bool b2(!false); // b2 will have the value true
boolean变量并不是在存储的时候存储‘true’或者‘false’。取而代之的是它存储的是整数:true变成1,false变成0.同样地,极端boolean值的时候并不是计算true和false,而是计算0和1.
通常来说当我们使用cout输出boolean型变量的时候,他会变成1,0.
#include <iostream>
int main()
{
std::cout << true << std::endl; // true evaluates to 1
std::cout << !true << std::endl; // !true evaluates to 0
bool b(false);
std::cout << b << std::endl; // b is false, which evaluates to 0
std::cout << !b << std::endl; // !b is true, which evaluates to 1
return 0;
}
上面代码输出依次是: 1 0 0 1
如果你想要输出ture或者false,你可以用std::boolalpha
#include <iostream>
int main()
{
std::cout << true << std::endl;
std::cout << false << std::endl;
std::cout << std::boolalpha; // print bools as true or false
std::cout << true << std::endl;
std::cout << false << std::endl;
return 0;
}
上面代码依次输出的是:1 0 true false
当然你可以使用std::noboolalpha来恢复
if语句中的boolean值:
boolean变量最常用的用法是if语句,if语句基本格式如下:
if (expression) statement1;
or
if (expression) statement1;
else statement2;
当if使用在上下文的时候,这种语句叫做条件语句,或者条件表达式。
在条件表达式的两种格式中,都对表达式进行计算。如果表达式计算是1,那么就走statement1;如果计算为0,就走statement2.
记住true的值是1(非0),false的值是0.
下面的例子:
if (true) // true is our conditional expression
std::cout << "The condition is true" << std::endl;
else
std::cout << "The condition is false" << std::endl;
打印: The condition is true
让我们看看工作流程,首先我们看一下if语句的判断部分。true相当于1,所以语句会走if下面的逻辑。
bool b(false);
if (b)
std::cout << "b is true" << std::endl;
else
std::cout << "b is false" << std::endl;
打印:b is false
false是0,走下面的逻辑,所以需要走else下面的语句。
执行多个语句:
在上面的例子中,每条语句只有一句话,但是我们经常会碰到有多个语句的场景,这就需要使用{}包起来。这个将在后面继续学习:
if (expression)
{
statement1a;
statement1b;
// etc
}
or
if (expression)
{
statement1a;
statement1b;
// etc
}
else
{
statement2a;
statement2b;
// etc
}
比如:
if (true) // when this if statement executes
{ // this block of statements will execute
std::cout << "The condition is true" << std::endl;
std::cout << "And that's all, folks!" << std::endl;
}
else
std::cout << "The condition is false" << std::endl;
输出是:
The condition is true
And that's all, folks!
一个稍微复杂点的例子:
==运算符用来记录两个整数值是否相等,如果两个值相等就返回true,否则返回false。
#include <iostream>
int main()
{
std::cout << "Enter an integer: ";
int x;
std::cin >> x;
if (x == 0)
std::cout << "The value is zero" << std::endl;
else
std::cout << "The value is non-zero" << std::endl;
return 0;
}
现在是输入为4的一个输出:
Enter an integer: 4
The value is non-zero
让我们看一下工作流程:
首先输入一个整数,我们输入的是4.然后把输入的整数和0做比较,判断是否相等。4不等于0,所以走else分支。
Boolean 返回值:
boolean值经常被用来作为函数的返回值以检查一些事情是对的还是错的。这类函数通常会命名为is胡总和has。
考虑下面的例子,哪一个是类似的
#include <iostream>
// returns true if x and y are equal, false otherwise
bool isEqual(int x, int y)
{
return (x == y); // operator== returns true if x equals y, and false otherwise
}
int main()
{
std::cout << "Enter an integer: ";
int x;
std::cin >> x;
std::cout << "Enter another integer: ";
int y;
std::cin >> y;
if (isEqual(x, y))
std::cout << x << " and " << y << " are equal" << std::endl;
else
std::cout << x << " and " << y << " are not equal" << std::endl;
return 0;
}
下面是直接的输出:
Enter an integer: 5
Enter another integer: 5
5 and 5 are equal
Boolean值需要一点时间来适应,但是一旦你把你的思想集中在上面,他们就显得非常简单了。
非boolean值的情况:
在上面所有的例子中,我们的条件都是boolean类型的变量,那么假如不是booelan类型的变量呢?
你已经知道答案了,如果是非0的值,那么会执行if的语句。
if (4) // non-nonsensical, but for the sake of example...
std::cout << "hi";
else
std::cout << "bye";
输入boolean值:
输入boolean值往往会绊倒很多新手:
int main()
{
bool b; // uninitialized variable
std::cout << "Enter a boolean value: ";
std::cin >> b;
std::cout << "You entered: " << b;
return 0;
}
如果你输入:true,那么输出会是:119
事实是cin只接受两个boolean变量值:0 1。如果你输入了其他值,是不被认可的。所以cout的时候会随时输出内存中已经有的值,可能是任意的一个值。垃圾