= 60 * 60 * 1000/1 * 1000)"是真的吗?-6ren"> = 60 * 60 * 1000/1 * 1000)"是真的吗?-首先,定义两个不带括号的常量表达式是我的错: #define BIG_INTERVAL 60 * 60 * 1000 #define SMALL_INTERVAL 1 * 1000 int i = 1-6ren">
gpt4 book ai didi

c - "int i = 1;Why (i >= 60 * 60 * 1000/1 * 1000)"是真的吗?

转载 作者:太空狗 更新时间:2023-10-29 16:20:40 24 4
gpt4 key购买 nike

首先,定义两个不带括号的常量表达式是我的错:

#define BIG_INTERVAL 60 * 60 * 1000
#define SMALL_INTERVAL 1 * 1000

int i = 1;

if (i >= BIG_INTERVAL / SMALL_INTERVAL - 1)
{
printf("Oops!\n");
}

宏展开后的if语句为if(i >= 60 * 60 * 1000/1 * 1000 - 1)

这不是我的本意。但是如果我写 if (i >= 3600000000 - 1),我会发现有些奇怪。这是假的。

60 * 60 * 1000/1 * 1000 - 1 是什么类型? int?

最佳答案

int 上的所有运算符都返回 int。所以是的,60 * 60 * 1000/1 * 1000 - 1 是一个 int。但是 3599999999 的预期结果对于 int 来说太大了,因此表达式的实际计算结果为 -694967297(假设 32 位 int 和二进制补码)。

对于文字 3600000000 不会发生这种情况,因为大于 INT_MAX 的整数文字属于可以保存完整值的类型。

关于c - "int i = 1;Why (i >= 60 * 60 * 1000/1 * 1000)"是真的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6689142/

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