为什么在 stdbool.h 中使用整数而不是无符号整数?
Why in stdbool.h are used integers and not unsigned ones?
在stdbool.h
中,true
和false
只是简单的整数。为什么不签名?有绩效动机吗?
true 和 false 都是“#defined”到 0、1。因此,它们没有签名或未签名,只是令牌。他们将 'typed' 进行分配、比较,通常没有 运行 时间成本。
bool b = true ;
unsigned int uv = true ;
int sv = true ;
两者执行时间相同
有一次在我的一个讲座中,我的教授说 C 中的 bool 实现作为整数专门用于电子规则。 1 电流,0 无信号。所以 1-真 0 假
对值 false
和 true
使用类型 int
使它们与逻辑否定运算符 (!
) 产生的类型和值集一致、关系运算符(<
、>
、<=
、>=
)、相等运算符(==
、!=
)、逻辑与运算符 (&&
) 和逻辑 OR 运算符 (||
),所有这些都产生类型为 int
.
的值 0 或 1
此外,如果 true
定义为 1u
,则 int minust = -true;
会将 minust
初始化为实现定义的值(或引发实现定义的信号) ,而不是将 minust
初始化为值 -1
。编译器可能会发出警告。这是因为 1u
的类型是 unsigned int
,-1u
的值是 UINT_MAX
,而 UINT_MAX
不能用 int
表示。
我意识到 -true
的论点有点站不住脚。我想表达的意思是,将 false
和 true
常量定义为 unsigned int
类型,而不是纯数值 0 和 1 的类型(即 int
),会对你可以用这些常量做什么施加限制(在我看来是不必要的限制)。
在stdbool.h
中,true
和false
只是简单的整数。为什么不签名?有绩效动机吗?
true 和 false 都是“#defined”到 0、1。因此,它们没有签名或未签名,只是令牌。他们将 'typed' 进行分配、比较,通常没有 运行 时间成本。
bool b = true ;
unsigned int uv = true ;
int sv = true ;
两者执行时间相同
有一次在我的一个讲座中,我的教授说 C 中的 bool 实现作为整数专门用于电子规则。 1 电流,0 无信号。所以 1-真 0 假
对值 false
和 true
使用类型 int
使它们与逻辑否定运算符 (!
) 产生的类型和值集一致、关系运算符(<
、>
、<=
、>=
)、相等运算符(==
、!=
)、逻辑与运算符 (&&
) 和逻辑 OR 运算符 (||
),所有这些都产生类型为 int
.
此外,如果 true
定义为 1u
,则 int minust = -true;
会将 minust
初始化为实现定义的值(或引发实现定义的信号) ,而不是将 minust
初始化为值 -1
。编译器可能会发出警告。这是因为 1u
的类型是 unsigned int
,-1u
的值是 UINT_MAX
,而 UINT_MAX
不能用 int
表示。
我意识到 -true
的论点有点站不住脚。我想表达的意思是,将 false
和 true
常量定义为 unsigned int
类型,而不是纯数值 0 和 1 的类型(即 int
),会对你可以用这些常量做什么施加限制(在我看来是不必要的限制)。