gpt4 book ai didi

c - C 中的常量值错误

转载 作者:行者123 更新时间:2023-11-30 14:33:53 26 4
gpt4 key购买 nike

我尝试使用#define 在 C 中使用 256 作为常量。这等于 255 + 1(即 0xff + 1)。自从 limits.h , UCHAR_MAX是 255, 256 应该等于 UCHAR_MAX + 1.所以我写:

#include <limits.h>
#define BASE_NUM ((int)UCHAR_MAX)+1

所以,当我这样做时printf("%f",1000.0/(float)BASE_NUM); ,它打印 4.921569,这是错误的(只有 BASE_NUM 是 203.187 时才是正确的)。

但是,通过写 printf("%f",1000.0/((float)UCHAR_MAX+1)); ,我得到 3.906250 作为输出,它确实是正确的。因此,BASE_NUM一定不等于 256,但令人惊讶的是,printf("%d",BASE_NUM);打印 256,这显然是一个矛盾,如 BASE_NUM实际上一定不能是 256。

我猜想当我在常量的定义处求和时,这与溢出有关,但我真的看不出问题到底是什么,因为我正在强制转换 UCHAR_MAX在向 int 添加任何内容之前先将其转换为 int,因此不应出现溢出。

最佳答案

#define 括在另一组括号中:

#define BASE_NUM (((int)UCHAR_MAX)+1)

说明:

每当您在使用宏时遇到问题时,只需将其定义复制粘贴到您使用它们的任何位置,然后从那里进行评估:

printf("%f", 1000.0 / (float) ((int)UCHAR_MAX) + 1);
<小时/>
  • 首先,UCHAR_MAX 被转换为 int 并变为 255。 (这里不需要强制转换,因为常量 255 已被编译器视为 int)。
  • 然后将其转换为 float 并变为 255.0
  • 然后,由于 C 语言中除法优先于加法,因此 1000.0 除以 255.0
  • 最后,1 转换为浮点型,成为 1.0,并添加到除法的结果 (1000.0/255.0 + 1.0) == 4.92

关于c - C 中的常量值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59121080/

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