首页 > 编程笔记 > C++笔记 阅读:185

C++ bool布尔类型的用法(非常详细)

在日常生活中,我们经常需要表示不同类型的数据。例如,我们可能需要使用 int 类型的变量来表示 800 路公交车的编号;使用 float 类型的变量来表示西红柿每斤 3.5 元的价格。

除此之外,有时我们需要表示逻辑状态,例如:
这些问题中的“过了没有”和“爱不爱”都涉及逻辑判断。与数值数据类型不同,逻辑状态具有“非此即彼”的特性。例如,考试结果只能是“过了”或“没过”,没有其他选项。为了表示这种逻辑状态,在 C++ 中我们使用布尔类型(bool)。

布尔类型的变量只能被赋予两个值:true 表示真或肯定的状态,false 表示假或否定的状态。C++ 标准并没有规定布尔类型的长度,但在 Visual C++ 中,布尔类型通常占用 1 字节。

以下是布尔类型使用的一个简单示例:
//布尔类型变量bPass,表示考试是否通过
//赋值为true,表示考试通过
bool bPass = true;
与 int 等数值类型数据主要用于计算不同,布尔类型的数据主要用来保存逻辑判断的结果,或者在条件结构或者循环结构中,用于控制程序的执行流程。例如:
cout << "请输入你的分数:" << endl;
//用于保存输入分数的int类型变量
int nScore = 0;
//输入分数
cin >> nScore;
//保存考试通过与否的 boo1 类型变量
//默认状态为 false,表示没有通过
bool bPass = false;
//用条件结构进行逻辑判断
//判断输入的分数是否大于或等于60
if (nScore >= 60)
{
    //保存逻辑判断的结果
    //如果输入的分数大于或等于60,则赋值为true
    //表示考试通过,否则继续保留其初始值false,表示没有通过
    bPass = true;
}
//在条件结构中,根据bpass的取值不同
//对程序的执行路径进行控制
if (bPass)
{
    //如果 bPass 的值为true,则输出考试通过
    cout << "恭喜,你通过了考试。" << endl;
}
else
{
    //如果bPass的值为false,则输出考试未通过
    cout<<"很遗憾,你没有通过考试。"<<endl;
}
在示例代码中,bPass 这个布尔类型的变量用于存储一个逻辑判断的结果,它记录了输入分数 nScore 是否大于或等于 60:
bPass 变量因此保存了对 nScore 是否满足特定条件的逻辑判断结果。

布尔类型的变量不仅用于存储逻辑判断的结果,它们更多地用于控制程序的执行流程,特别是在条件语句或循环结构中。例如,在上述代码中的 if 条件语句里,bPass 作为条件判断的依据:
这样,基于 bPass 变量的值,程序能够选择不同的执行路径,产生相应的输出结果。

杜绝布尔类型和整型的隐式转换

布尔类型变量在 C++ 中只有两个可能的值:true 和 false。然而,当布尔变量用于需要数值的环境时,它们会被隐式转换为整数值:false 转换为 0,而 true 转换为 1。这种隐式转换同样适用于将数值赋给布尔变量:数值 0 转换为 false,任何非 0 数值转换为 true。

以下是这种隐式转换的示例:
bool a = 4;    // 4被转换为true,a的值为true
int b = a;     // a被转换为1,b的值为1
int c = a + b; // a被转换为1参与运算,c的值为2
这种隐式转换可能非常隐蔽,某些编译器甚至不会发出警告。隐蔽的行为可能导致难以察觉的错误。因此,我们应该避免使用数值给布尔变量赋值,或者避免在算术运算中使用布尔变量,以防止这种隐式转换带来的潜在问题。

相关文章