gpt4 book ai didi

转换到 _Bool

转载 作者:行者123 更新时间:2023-12-04 12:09:11 24 4
gpt4 key购买 nike

传统上,C 中的 boolean 值用 int 表示。或 char .新款_Bool type 使意图更清晰,但还有另一个有趣的功能:它似乎将浮点数转换为它,不会向零截断,而是与精确的零进行比较:

#include <stdio.h>

int main(int argc, char **argv) {
double a = 0.1;
int i = (int)a;
printf("%d\n", i);
_Bool b = (_Bool)a;
printf("%d\n", b);
return 0;
}
打印
0
1
所以这是一个语义差异。还有一个我很满意;它复制了使用浮点数作为条件的效果。
这是可以全面依赖的东西吗?新的 C 标准是否定义了将 X 转换为 _Bool 的结果?与 X ? 1 : 0 相同对于所有 X 来说,这是一个有效的操作?

最佳答案

在 C 标准(6.3.1.2 boolean 类型)中有写

1 When any scalar value is converted to _Bool, the result is 0 if thevalue compares equal to 0; otherwise, the result is 1.


那是在转换为类型 _Bool 的过程中编译器不会尝试将具有转换运算符的表达式的操作数的值(向零截断或其他值)表示为整数。它只检查值是否等于或不等于零。
其实这个声明
 _Bool b = (_Bool)a;
相当于
 _Bool b = a;

关于转换到 _Bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68129719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com