C 语言中 布尔 bool 型变量扩充的使用,头文件为 stdbool.h

本文详细介绍了C语言中的布尔bool型,包括其由来、内存占用、赋值方式以及函数定义。布尔型在C语言中通过<stdbool.h>头文件支持,占用1个字节,用0表示false,非0表示true。文章还讨论了在不支持C99标准的编译器中的bool型自定义方法,如枚举enum、宏定义#define和typedef结合常量const。

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

 

一、简介

1. 布尔一词的由来

在科学领域,很多专业术语的命名都是以科学家的名字来命名的,布尔也不例外。

乔治·布尔(George Boole,1815.11.2~1864),1815年11月2日生于英格兰的林肯。19世纪最重要的数学家之一,出版了《逻辑的数学分析》 ,这是它对符号逻辑诸多贡献中的第一次。1854年,他出版了《思维规律的研究》,这是他最著名的著作。在这本书中布尔介绍了现在以他的名字命名的布尔代数。

2. 布尔型

布尔(Boolean)是计算机科学领域中的一种逻辑数据类型,顾名思义,用于逻辑运算。该数据类型只有两个可能的值,true 和 false,数字化的表示可以分别对应 1 和 0。在 C 语言中,通常情况下将 0 抽象地表示成 假(false),而 非0 则抽象地表示成(true)。在某些情况下我们会将 int 类型当做布尔型使用,以数字 1 代表真,以数字 0 代表假。
 

二、使用

注意:使用布尔型定义需要头文件 stdbool.h,本头文件在 C99 标准中引入。

1. 内存占用

从理论上讲,布尔型数据只有 1 和 0 两种可能,所以占用应该是 1 bit 也就是 1/8 个字节,但是实际在 C 语言中的占用达到了 1 个字节,与 char 类型一致。如下:

#include <stdio.h>
#include <stdbool.h>
int main(void)
{
	printf("bool 型的占用大小为 %llu\n", sizeof(bool));
	printf("char 型的占用大小为 %llu\n", sizeof(char));
}

输出结果:

bool 型的占用大小为 1
char 型的占用大小为 1

注:格式说明符 %llu 对应的数据类型为 unsigned long long,即 sizeof 函数返回值类型
 
综上,bool 型在空间占用上比 int 更小,与 char 相比使用起来会更加严谨。

2. 赋值
常规定义与赋值
#include <stdbool.h>
int main(void)
{
	bool status_true = true;    /* 实际存储的值为 1 */
	bool status_false = false;  /* 实际存储的值为 0 */
}
数值赋值

与 C 语言传统一致,非0 代表 true,而 0 则代表 false。

#include <stdio.h>
#include <stdbool.h>
int main(void)
{
	bool a = -8, b = 0, c = 6;
	printf("a = %d, b = %d, c = %d", a, b, c);
}

输出结果:

a = 1, b = 0, c = 1

由此可见,变量 a 的值为 true,变量 b 的值为 false,变量 c 的值为 true。

3. 函数定义

某些判断函数也可以直接使用 bool 型进行定义,如下判断非负整数中的素数:

#include <stdbool.h>
#include <math.h>
bool isPrime(unsigned int n)
{
	bool isTrue = true;
	if (n == 0 || n == 1) isTrue = false;
	if (n > 3)
	{
		unsigned int limit = (unsigned int)sqrt(n) + 1;
		for (unsigned int i = 2; i <= limit ; i++)
		{
			if (!(n % i))
			{
				isTrue = false;
				break;
			}
		}
	}
	return isTrue;
}

返回值可直接用于如 if 语句的这类语句进行判断。
 

三、附录

1. stdbool.h 的内容

在 Visual Studio 2019 中该文件的定义如下,仅做参考:

//      Copyright (c) Microsoft Corporation. All rights reserved.
//
// The C Standard Library <stdbool.h> header.
//
#ifndef _STDBOOL
#define _STDBOOL

#define __bool_true_false_are_defined	1

#ifndef __cplusplus

#define bool	_Bool
#define false	0
#define true	1

#endif /* __cplusplus */

#endif /* _STDBOOL */

2. bool 型自定义方式

以下列出几种可能的方式供参考,主要在不支持 C99 标准的编译器中使用。

① 枚举 enum
typedef enum { false, true }bool;
② 宏定义 #define
#define bool int
#define true 1
#define false 0
③ 类型自定义 typedef + 不变变量(常量) const
typedef int bool;
const bool true = 1;
const bool false = 0;

 
注意:本文前两部分的部分内容仅在支持 C99 标准及以上的编译器中可运行。
以上。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值