Learning C++ 之 2.6 Boolean数据类型和if语句简介

  • Post author:
  • Post category:其他


在现实生活中经常会问或者被问答案是“是”或者“不是“的问题。如:苹果是水果么?  是  你喜欢竹笋么? 不

现在考虑一种相似的说法。苹果是水果。这一句是对还是错?当然是对的。我喜欢竹笋。错

这些句子只有两种结果: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的时候会随时输出内存中已经有的值,可能是任意的一个值。垃圾