作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
= 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">
首先,定义两个不带括号的常量表达式是我的错:
#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/
我是一名优秀的程序员,十分优秀!