小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/
只有两个值的基本数据类型:布尔
基本数据类型bool
是一个比较有趣的类型。它只能保存两个值,true
和false
。只有两个值的情况在代码中随处可见的如:是否、有没有,开关等。
bool
除了可以保存true
和false
,它也可以保存数字,数字0
与false
等价,非0
数字与true
等价。但由于数字代表两个值并不直观,所以当使用bool
时,建议使用true
/false
代替数字。
当我们需要使用std::cout
输出true
和false
时,需要先输出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
的结果是true
;true && false
、false && true
、false && false
的结果都是false
。即&&
两边的条件都成立的时候,结果才为true
,所以&&
的意思就是并且。例如x > 0 && x < 100
中左右两边判断都必须成立,它的结果才是true
,也就是x
满足条件。||:
true || true
、true || false
、false || true
的结果都是true
;false || false
的结果是false
。即||
两边的条件都不成立的时候,结果才为false
,所以||
的意思就是或者。例如x < 0 || x > 100
中左右两边判断只要有一边成立,它的结果就会是true
,也就是x
满足条件。!:
!true
结果是false
;!false
结果是true
。所以!
表示否定,也就是非。
对于isfemale == true
这样一条判断,一般都会简化成以下形式:
isfemale
因为如果isfemale
是true
的话,true == true
结果是true
;如果是false
的话,false == true
结果是false
。因此,bool
变量判断true
的时候可以简化成上面的形式,直接理解单词字面意义:是女的。
对于isfemale == false
这样一条判断,可以简化成以下形式:
!isfemale
因为如果isfemale
是true
的话,true == false
结果是false
,也就是!true
;如果是false
的话,false == false
结果是true
,也就是!false
。因此,bool
变量判断false
的时候可以简化成上面的形式,直接理解单词字面意义:不是女的。
巩固练习
- 输入一个整数数值,然后一次过输出以下几个问题的答案:
- 这个数值是不是0,是则输出
true
,不是则输出false
; - 这个数值是不是正数,是则输出
true
,不是则输出false
; - 这个数值是不是负数,是则输出
true
,不是则输出false
; - 这个数值是不是非负数,是则输出
true
,不是则输出false
。