gpt4 book ai didi

C (gnu11) enum 变量无法与 int 进行比较?

转载 作者:行者123 更新时间:2023-12-02 01:48:17 25 4
gpt4 key购买 nike

这对我来说真的很奇怪,我从未在有关 C 枚举的资源中看到过任何对此的讨论。变量a类型为enum Direction ,它可以是 -1,但是 a<0将会是假的。我对枚举缺少什么?

#include <stdio.h>

enum Direction {N,W,S,E};

int main()
{
enum Direction a = N;
printf("a is %d\n", a);
a--;
printf("now a is %d\n", a);
printf("but (a<0) is %d\n\n", (a<0));

int b = N;
printf("b is %d\n", b);
b--;
printf("now b is %d\n", b);
printf("and (b<0) is %d\n", (b<0));

return 0;
}

输出为

a is 0
now a is -1
but (a<0) is 0

b is 0
now b is -1
and (b<0) is 1

最佳答案

枚举的基础类型是实现定义的整数类型,可以表示枚举的所有项目。在这里,它可以是 charintunsigned int(也可能是其他)。

您的实现显然选择使用 unsigned int ;它与与 0 的比较一致(不能为负),并且您只需将其打印为 -1 因为在 2 补码中,-1 与“相同的最大无符号数”具有相同的表示形式width”(这是您拥有的值,因为无符号 0 减 1 将换行到最大值)。

由于 printf 的 %d 格式,它仅打印为 -1,它将其转换回带符号的。但因为它是无符号的,所以您应该使用 %u

当您通过创建 int 变量将其转换为有符号整数时,您将拥有一个实际的 int,因此它的行为正确(由 %d 打印为 -1 printf 的格式)。

关于C (gnu11) enum 变量无法与 int 进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70645343/

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