首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当-1L、1U和-1UL为符号常数时,-1L < 1U和-1L > UL的输出量与声明为枚举常数时的输出量不同。

当-1L、1U和-1UL为符号常数时,-1L < 1U和-1L > UL的输出量与声明为枚举常数时的输出量不同。
EN

Stack Overflow用户
提问于 2020-10-13 18:50:48
回答 1查看 158关注 0票数 2

B&R在他们的书“C编程语言”( the C Programming Language)中说--数字提供了一种方便的方法,可以将常量值与名称关联起来,这是#define的另一种选择,它的优点是可以为您生成值。

所以我为-1L,1U和1UL定义了枚举常数。结果并不如我所料,在这两种情况下都应该是一样的。

代码语言:javascript
运行
复制
#include<stdio.h>

#define NEGATIVE_SIG_LONG -1L
#define UNSIG_INT 1U
#define UNSIG_LONG 1UL

main()
{
  enum { ENUM_NEGATIVE_SIG_LONG = -1L, ENUM_UNSIG_INT = 1U, ENUM_UNSIG_LONG = 1UL};                                                                                                                                 

  printf("-1L < 1U: %d\n", -1L < 1U); // outputs: 1
  printf("-1L > 1UL: %d\n\n", -1L > 1UL); // outputs: 1

  printf("-1L < 1U: %d\n", NEGATIVE_SIG_LONG < UNSIG_INT); // outputs: 1
  printf("-1L > 1UL: %d\n\n", NEGATIVE_SIG_LONG > UNSIG_LONG); // outputs: 1

  printf("-1L < 1U: %d\n", ENUM_NEGATIVE_SIG_LONG < ENUM_UNSIG_INT); // outputs: 1
  printf("-1L > 1UL: %d\n", ENUM_NEGATIVE_SIG_LONG > ENUM_UNSIG_LONG); // outputs: 0, expected 1

  return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-13 19:01:11

在C中,枚举常量具有int类型。

来自C标准(6.4.4.3枚举常量)

2声明为枚举常量的标识符具有int类型。

所以在这个电话里

代码语言:javascript
运行
复制
printf("-1L < 1U: %d\n", ENUM_NEGATIVE_SIG_LONG < ENUM_UNSIG_INT); // outputs: 1

这里使用的是表达式

代码语言:javascript
运行
复制
-1 < 1

结果是1。

在这个电话里

代码语言:javascript
运行
复制
printf("-1L > 1UL: %d\n", ENUM_NEGATIVE_SIG_LONG > ENUM_UNSIG_LONG); // outputs: 0, expected 1

这里使用的是表达式

代码语言:javascript
运行
复制
-1 > 1

这就产生了0

至于这些电话

代码语言:javascript
运行
复制
printf("-1L < 1U: %d\n", -1L < 1U); // outputs: 1
printf("-1L > 1UL: %d\n\n", -1L > 1UL); // outputs: 1

然后,似乎有符号的long类型可以包含类型无符号int的所有值。所以这个表达

代码语言:javascript
运行
复制
-1L < 1U

收益率1.

另一方面,类型signed long无法包含unsigned long类型的所有值。常见的类型将是unsigned long。因此,表达式-1L被转换为unsigned long类型,并产生大于1UL的该类型的最大值。

注意功能主应该有返回类型的int

代码语言:javascript
运行
复制
int main( void )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64341409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档