C++入门教程(6):布尔和判断运算

小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/


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

基本数据类型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

再例如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,所以&&的意思就是并且。例如x > 0 && x < 100中左右两边判断都必须成立,它的结果才是true,也就是x满足条件。

  • ||true || truetrue || falsefalse || true的结果都是truefalse || false的结果是false。即||两边的条件都不成立的时候,结果才为false,所以||的意思就是或者。例如x < 0 || x > 100中左右两边判断只要有一边成立,它的结果就会是true,也就是x满足条件。

  • !!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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,145评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • C++运算符重载-上篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 2,293评论 0 51
  • 由苹果官网翻译得来fork自https://github.com/letsswift/The-Swift-Prog...
    佛祖拿屠刀阅读 415评论 0 1
  • 莺初解语,冰雪初融。消融的雪水泛着热气,或顺着屋檐,或沿着树梢,滑落在地上,融化成斑驳的小溪,汇聚成一洼洼...
    邪君01阅读 255评论 0 1