2

在 MCQ 考试中,两个选择是:
#define SEC (60*60*24*365) 或者 两种可能性之间是否存在差异,从而使一个成为更好的选择?
#define SEC (60*60*24*365UL)

4

2 回答 2

2

constants60和all 都有 type 24,所以乘以这些值也将在该类型中完成。但是,an 中可表示的最大值允许低至 32767,因此完整的乘法可能会溢出。365intint

但是,即使使用的版本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 回答