【程序笔记】第一期-深究bool类型

本文详细探讨了C++中bool类型的特性及其特殊用法,包括bool类型的读入与输出方式、存值方法以及算术运算的特点。通过实验演示了如何利用这些特性进行编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lucky_Glass的程序笔记

第一期:《深究bool类型》

众所周知,bool类型只有一个字节(使用sizeof可以查看),非常小,C++官方申明的bool值只有true(1)和false(0)。但是今天作者要告诉大家一些关于C++ bool类型的其他用法。


一、bool类型的读入与输出
虽然官方并不支持bool类型的读入以及输出。但由于true和false分别可以用1和0表示,所以我们仍然可以用 scanf("%d")来读入的。C++还申明“非0即真”,所以输入任何一个非0的数在表达式中均为true。输出依然可以用printf("%d")来完成,它如何输出呢?这取决于bool变量的存值,它也可以储存整数,输出的正是它所储存的那一个整数。

二、bool类型的存值
这个将作为本期讲解的重点。int类型有4个字节,因此最大能储存到2147483647。数字也是众多数据类型的基础,char也能够用ASCII码转换为数字形式。但是bool类型之前提过,只有一个字节,我们可以推断bool的数字形式最大能储存到255,也就是1字节能够储存的量。
我们熟悉bool的true、false的赋值,但是如何给它赋值为一个数字呢?直接用’=’(赋值号)可以吗?作者编写了一个代码如下:

/*Lucky_Glass*/
#include<cstdio>
int main()
{
    bool Check;
    Check=20;
    printf("%d\n",Check);
    return 0;
}

大家可以试试,答案是1,也就是说20并没有真正地储存到变量Check里面,存进去的只是“非0即真”所转化的true。那么如何存值呢?据作者试验,scanf是可以把整数存入bool变量的。程序如下:

/*Lucky_Glass*/
#include<cstdio>
int main()
{
    bool Check;
    scanf("%d",&Check);
    printf("%d\n",Check);
    return 0;
}

输入一个非负数,那么这个程序会输出你输入的数。但是如果你输入负数的话,它的存值将会是bool类型的最大值(255)加上那一个负数(比如输入”-1”,那么它会输出”254”,即255+(-1))。那么这有一个好处——bool类型自带非负性,也许在一些时候能够帮助你。

三、bool类型的运算
讲这一个几乎没有什么用,但是作为一个比较特别的地方,还是讲解一下。这是一个普通的“a+b”程序:

/*Lucky_Glass*/
#include<cstdio>
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d\n",a+b);
    return 0;
}

那么大家试一试把第5行的int改为bool?就像这样:

/*Lucky_Glass*/
#include<cstdio>
int main()
{
    bool a,b;
    scanf("%d%d",&a,&b);
    printf("%d\n",a+b);
    return 0;
}

它会输出什么?直接说吧,当你输入非负数(以下均不能超过255),它总会输出你输入的后一个数,即bool类型的a+b=b(比如输入“5 32”,会输出32)。但是如果输入负数就十分有趣!当你输入2个负数时,它会输出511加上第二个负数(比如输入“-14 -3”,会输出508)。当你第一个数是负数,第二个数是非负数时,它会输出那一个非负数。当第一个数是非负数,第二个数是负数时,它的结果也是511加上那一个负数(比如输入“2 -3”,会输出508)。
再来减法(把之前的程序的‘+’改为‘-’就行了)。首先是一个任意数和一个非负数,会输出该非负数的相反数(比如输入“-3 4”,会输出“-4”)。然后是一个任意数与一个负数,会输出该负数的绝对值减1(比如输入“3 -4”,会输出“3”)。
剩下的‘*’(乘)和‘/’(除)以及‘%’(取模)作者就直接说了——无论输入什么,bool的乘法结果总是为0,大家可以试一下;至于除法和取模大家还是不要试了,会运行错误。


以上是本期的全部内容,这是作者的第一篇笔记,希望大家支持。作者在评论区中收集一下大家的意见,如果大家觉得可以,请告诉作者,作者会坚持做下去的,谢谢!

—Lucky_Glass

### 关于 `bool` 数据类型的概述 #### C 语言中的布尔类型 从 C99 标准起,C 语言引入了 `_Bool` 类型,并通过 `<stdbool.h>` 头文件提供了更友好的接口。该头文件定义了一个名为 `bool` 的宏来替代 `_Bool`,同时还定义了常量 `true` 和 `false` 来分别表示逻辑上的真和假[^1]。 以下是使用 C 语言中布尔类型的简单示例: ```c #include <stdio.h> #include <stdbool.h> int main() { int num1 = 5, num2 = 10; bool result; result = (num1 < num2); printf("Is %d less than %d? %s\n", num1, num2, result ? "Yes" : "No"); return 0; } ``` #### C++ 中的布尔类型C++ 中,`bool` 被正式纳入标准库,成为一种原生数据类型。其行为与其他基本数据类型(如 `int`, `char`)一致。可以通过赋值表达式或条件判断为其设置值[^2]。 下面是一个简单的 C++ 示例程序展示如何利用布尔变量存储比较操作的结果: ```cpp #include <iostream> using namespace std; int main(){ int a = 7, b = 3; bool isGreater; isGreater = (a > b); // 判断 a 是否大于 b 并将结果存入isGreater cout << "Is a greater than b? " << (isGreater ? "True" : "False") << endl; return 0; } ``` #### Python 中的布尔类型 Python 提供了一种直观的方式处理布尔值,即 `True` 和 `False`。这些关键字实际上是整数值的一个子集,在内部实现上相当于 `1` 和 `0`。任何涉及关系运算符的操作都会返回一个布尔对象[^3]。 这里有一个例子说明怎样运用布尔值控制流程走向: ```python temperature = float(input("Enter the current temperature: ")) if temperature >= 30: hot_day = True else: hot_day = False print(f"It's {'hot' if hot_day else 'not hot'} outside.") ``` #### 鸿蒙开发环境下的布尔转换实例 对于鸿蒙系统的开发者来说,掌握不同层面间的基础数据互转技巧尤为重要。比如在一个 Native 应用场景下,可能需要把 ArkTS 层面传来的参数解析成对应的本地 C/C++ 变量形式再做进一步加工[^4]。 假设我们有如下需求:接收来自前端界面的一组开关状态信息并打印出来。 ```cpp // 假设这是由ArkTS端发送过来的数据结构体部分字段描述 struct SwitchStatus{ bool powerOn; }; void PrintSwitchInfo(const struct SwitchStatus& status){ cout << "Power switch is currently turned " << (status.powerOn ? "ON." : "OFF.") << endl; } // 测试调用函数 PrintSwitchInfo({true}); // 输出:“Power switch is currently turned ON.” ``` #### Oracle 数据库中的伪布尔支持情况 尽管现代编程语言普遍具备良好的布尔语义支持,但在某些特定领域如SQL数据库管理系统里却并非总是如此理想化。像 Oracle 这样的主流 RDBMS 实际并未真正提供专门针对布尔概念的设计方案,而是建议采用字符或者数字编码的方式来模拟这一特性[^5]。 例如可以用单字母字符串 `'Y'/'N'` 或者 tinyint 数字 `1/0` 表达类似的含义。 --- ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值