在C语言中,用于布尔值的数据类型是Char还是Int?

19

我发现C语言中没有本地的bool类型。人们通常使用intchar,尽管似乎intchar更常用?这是真的吗?

我的第一反应是使用char作为它是一个较小的数据类型,但我是否错过了什么?int对于布尔值更好,如果是这样-为什么呢?


可能是因为0在用int表示时被认为是false,更加直观! - Ali
int通常被用作直观的选择,char则用于最优数据大小。 - Sam DeHaan
3
if语句中,char类型会自动转换为int类型。这只是一种空间优化方式:通常情况下,char类型比int类型更小。 - Etienne de Martel
5个回答

19
C99中有一个_Bool,如果包含stdbool.h则有一个bool
如果您没有(相当现代的编译器),请使用int,它通常是最快的类型。使用char节省的内存可能是微不足道的。

那么为什么 charint 更快呢?我的意思是,一个更大的数据类型处理起来更快吗? - thomthom
9
@thomthom 我实际上说的是int更快。它是最快的,因为它具有CPU的自然字长大小。这正是CPU所渴望的。请参阅这个很棒的答案 - cnicutar
我曾在C99中看到过bool - 我只是想知道如果你不使用charint,它们之间的使用差异。只是为了更好地理解它们的工作原理。但是如果我们包括bool,那么它与int的性能如何?它是一个伪装的int,还是一个真正的新数据类型? - thomthom
@thomthom 标准(正如应该的那样)非常通用。声明为 _Bool 类型的对象足够大,可以存储值 0 和 1 - cnicutar
那是我的笔误 - 我的意思是 intchar 更快 - 我有些混淆了。那个链接的答案非常有趣和启发性。 - thomthom

3

如果您使用的是比较现代的C编译器,则只需要:

#include <stdbool.h>

通常,这个宏的格式如下:
#define bool _Bool

这使得你可以在需要 bool 的地方使用 C99 内置的 _Bool 类型。


2

在 C99 中引入了一种名为 _Bool 的本地类型。在 <stdbool.h> 中,还有一个 #define 用于提供别名 bool,如果您需要的话(还有用于 truefalse#define)。


1
根据 ISO-9899,关系、逻辑和相等运算符的结果类型为 int。stdbool.h 中的 true 和 false 也是整数。如果要节省内存,请使用位域。

1

实际上,当使用char时,它总是被提升为int,因此没有真正的区别(请参见this)。虽然我从未见过char用作bool,但我会选择使用int。


所以 int 更快是因为 char 被转换成了 int - thomthom
@thomthom:是的,这就是原因。但速度提升如此之小,你可以忘记它 :) - BlackBear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接