3

我想知道 Boolean 是否是内置枚举。根据维基百科~

“某些枚举器类型可能内置在语言中。例如,布尔类型通常是值 FALSE 和 TRUE 的预定义枚举。”

http://en.wikipedia.org/wiki/Enumerated_type

在 C 和其他语言中,布尔值是枚举吗?如果不是 -你能解释为什么吗?

4

2 回答 2

3

boolC99 中的本机类型,而不是枚举。

更准确地说, bool 是一个定义为stdbool.h扩展为 的宏_Bool,它是实际的本机类型。

不同之处在于 abool只能包含trueor false(它们是扩展为 1 和 0 的宏),而枚举可以分配任何整数值。

于 2013-10-06T15:55:31.243 回答
2

这个问题更像是一个关于“什么是类型”的抽象哲学问题,而不是关于 C 的问题。在 C 中,一切(或多或少)本质上都是一个整数,但这没有抓住重点。

当您说“整数”时,您通常指的是一种算术类型,即加法和乘法等算术运算对其有意义的类型。

相比之下,枚举类型是一种仅包含离散值集合的类型,这些离散值之间没有进一步的结构。枚举值唯一的属性就是它自己;除了检查相等性之外,没有其他操作。

忘记了,整数也是枚举类型(它们枚举了你可以在鞋架上放的鞋子的数量,以及羊群的大小),但它们还有更多——它们有一个由算术给出的内部结构他们承认的操作。

一个布尔值同样可以通过忘记它的操作而被认为是一种枚举类型,只考虑它枚举了两种状态,真和假。但是,布尔值也定义了一整套操作,由逻辑操作(与、或、非等)给出,这使得它们与普通枚举不同。从这个意义上说,布尔值更接近“一位整数”而不是“枚举”。

总之,每个离散类型都可以被认为是一个枚举(并且大多数硬件都以相同的方式处理),但枚举是离散类型中“最弱的”,除了它们的标识之外没有任何结构。相比之下,整数和布尔值是具有附加(分别是算术和逻辑)结构的离散类型。

于 2013-10-06T16:41:54.510 回答