2011-10-05 42 views
1

编译器在将常量相乘时可以处理的数字大小是否有显式定义的限制?数字限制 - 乘以非常大的常量时是否有限制?

#define val1 1000000000000000 
#define val2 <some really really big number> 

std::cerr << val1 * val2 << std::endl; 

这会产生一个错误,由于数值限制在c + +给定一个足够大的val2值吗?如果有的话,那里/如何定义这个限制?

回答

4

这将是治疗作为一个整数,所以最大整数(limits.h定义)将适用

如果你想大量使用1000 ....... 0000L将其定义为长。

+0

如果'val2'也是一个'int'表达式,则返回true。根据实现情况,“long”可能大于或不可能大于“int”。 –

0

每种类型(int,long,float,double)都有一个依赖于机器的最大值。

符合IEEE标准的浮点和双精度值如果无法处理该值,将给予NaN或无穷大。

1

编译器将根据常量的位置使用最合适的大小。如果它太大,你会收到一个编译器错误。

2

有一个取决于实现的最大值,但如果你在 算法中溢出,则需要执行该操作才能发出 诊断(错误消息)。

相关问题