首页 > 解决方案 > C 文字和溢出

问题描述

在我的机器上,anint是 32 位,下面的代码:

int64_t m = (int64_t) 1 << 60;
int64_t n = (int64_t) 2048 * 2048 * 2048;

给出 2^60 和 2^33 的数学预期结果,即使标准似乎说 1 和 2048 应该被视为“int”。

我应该认为这个结果是运气,还是 C99 标准保证我不会溢出?

标签: cinteger

解决方案


铸造优先于许多其他操作,您可以在此处查看顺序http://users.eecs.northwestern.edu/~wkliao/op-prec.htm

所以你实际上一直在使用 int64_t (顾名思义,它是一个 64 位的有符号整数),这就是你不会溢出的原因。


推荐阅读