• Index

布尔和判断运算

Reads: 88

只有两个值的基本数据类型:布尔

基本数据类型bool是一个比较有趣的类型。它只能保存两个值,truefalse。只有两个值的情况在代码中随处可见的如:是否、有没有,开关等。

bool除了可以保存truefalse,它也可以保存数字,数字0false等价,非0数字与true等价。但由于数字代表两个值并不直观,所以当使用bool时,建议使用true/false代替数字

当我们需要使用std::cout输出truefalse时,需要先输出std::boolalpha,否则只会输出数字:

#include <iostream> // std::cout std::endl std::boolalpha

int main(void)
{
    std::cout << true << std::endl;
    std::cout << false << std::endl;

    std::cout << std::boolalpha;
    std::cout << true << std::endl;
    std::cout << false << std::endl;

    return 0;
}

输出结果:

1
0
true
false

比较运算符

比较运算符在代码中也是随处可见,比较运算符:

  • 等于==
  • 不等于!=
  • 小于<
  • 大于>
  • 小于或等于<=
  • 大于或等于>=

注意

  • 等于号是===是赋值符号。
  • !=<=>=都不能写反。

基础示例

使用比较运算符比较两个值,实际上是一个计算过程。如果公式成立则计算结果是true,如果公式不成立则计算结果是false。举个栗子:

#include <iostream> // std::cout std::endl std::boolalpha

int main(void)
{
    bool a = 10 == 9; // 公式不成立,结果是false
    bool b = 10 != 9; // 公式成立,结果是true
    bool c = 10 >= 9; // 公式成立,结果是true
    bool d = 10 <= 9; // 公式不成立,结果是false

    std::cout << std::boolalpha;
    std::cout << a << std::endl;
    std::cout << b << std::endl;
    std::cout << c << std::endl;
    std::cout << d << std::endl;
    std::cout << (10 > 9) << std::endl; // 如果直接输出计算过程则需要使用括号
    std::cout << (10 < 9) << std::endl;

    return 0;
}

输出结果:

false
true
true
false
true
false

基础讲解

以下代码进行比较运算,然后用bool变量保存运算结果:

bool a = 10 == 9; // 公式不成立,结果是false
bool b = 10 != 9; // 公式成立,结果是true
bool c = 10 >= 9; // 公式成立,结果是true
bool d = 10 <= 9; // 公式不成立,结果是false

如果需要直接输出计算结果,需要注意的是,必须使用(),让程序先计算出结果,然后再输出:

std::cout << (10 > 9) << std::endl;
std::cout << (10 < 9) << std::endl;

逻辑运算符

说到判断是否成立,肯定不能少了逻辑运算符。也就是下面这些:

  • 否定!
  • 并且&&
  • 或者||

最常用的就是数学公式中的0 < x < 100,但是你不能这样写成代码。这里的意思可以理解为:x > 0并且x < 100,写成代码就是x > 0 && x < 100

基础示例

#include <iostream> // std::cout std::endl std::boolalpha

int main(void)
{
    // 女王的个人信息
    unsigned int age = 12; // 年龄没有负数, 故用无符号, 12岁
    bool ismale = false; // 记录是不是男的, 不是
    bool isfemale = !ismale; // 记录是不是女的, 非男即女, !false就是true
    bool isgirl = age < 18 && isfemale; // 小于18岁并且是女性就是女孩子
    bool is_not_child = age < 2 || age >= 18; // 年龄小于2岁大于等于18岁就不是孩子, 明显这是false

    std::cout << std::boolalpha;
    std::cout << "女王的个人信息:" << std::endl;
    std::cout << "年龄:" << age << std::endl;
    std::cout << "男:" << ismale << std::endl;
    std::cout << "女:" << isfemale << std::endl;
    std::cout << "女孩子:" << isgirl << std::endl;
    std::cout << "不是孩子:" << is_not_child << std::endl;

    return 0;
}

输出结果:

女王的个人信息:
年龄:12
男:false
女:true
女孩子:true
不是孩子:false

基础讲解

三个逻辑运算符的计算公式如下:

  • &&true && true的结果是truetrue && falsefalse && truefalse && false的结果都是false。即&&两边的条件都成立的时候,结果才为true,所以&&的意思就是并且

  • ||true || truetrue || falsefalse || true的结果都是truefalse || false的结果是false。即||两边的条件都不成立的时候,结果才为false,所以||的意思就是或者

  • !!true结果是false!false结果是true。所以!表示否定,也就是

对于isfemale == true这样一条判断,一般都会简化成以下形式:

isfemale

因为如果isfemaletrue的话,true == true结果是true;如果是false的话,false == true结果是false。因此,bool变量判断true的时候可以简化成上面的形式,直接理解单词字面意义:是女的。

对于isfemale == false这样一条判断,可以简化成以下形式:

!isfemale

因为如果isfemaletrue的话,true == false结果是false,也就是!true;如果是false的话,false == false结果是true,也就是!false。因此,bool变量判断false的时候可以简化成上面的形式,直接理解单词字面意义:不是女的。

巩固练习

  1. 输入一个整数数值,然后一次过输出以下几个问题的答案:
    • 这个数值是不是0,是则输出true,不是则输出false
    • 这个数值是不是正数,是则输出true,不是则输出false
    • 这个数值是不是负数,是则输出true,不是则输出false
    • 这个数值是不是非负数,是则输出true,不是则输出false

Comments

Make a comment

  • Index

WARNING: You are using an old browser that does not support HTML5. Please choose a modern browser (Chrome / Microsoft Edge / Firefox / Sarafi) to get a good experience.