在 MCQ 考试中,两个选择是:
#define SEC (60*60*24*365)
或者
两种可能性之间是否存在差异,从而使一个成为更好的选择?
#define SEC (60*60*24*365UL)
问问题
4678 次
2 回答
2
constants60
和all 都有 type 24
,所以乘以这些值也将在该类型中完成。但是,an 中可表示的最大值允许低至 32767,因此完整的乘法可能会溢出。365
int
int
但是,即使使用的版本365UL
也不安全。因为乘法是从左到右关联的,所以第一个乘法是60 * 60
(这很好),然后结果乘以 24。它的数学结果是 86400,它可能已经溢出了一个int
.
一个安全的选择是:
#define SEC (60*60*24L*365)
但最清楚的是使所有类型的常量long
:
#define SEC (60L*60L*24L*365L)
(这个公式在闰年和包含闰秒的年份也是错误的)。
于 2013-08-02T01:56:14.257 回答
0
选择第二个#define SEC(60*60*24*365UL) "。
UL 表示这个数字的类型 unsigned long。由于 60*60*24*365 很大,在某些编译器上可能会出现溢出错误
于 2013-08-02T01:38:11.780 回答