编译器在乘以常数时可以处理的数字大小是否有明确定义的限制?
#define val1 1000000000000000
#define val2 <some really really big number>
std::cerr << val1 * val2 << std::endl;
如果val2的值足够大,是否会因c ++中的数字限制而产生错误?如果是,那么该限制在何处/如何定义?
答案 0 :(得分:4)
它将被视为一个整数,因此最大整数(在limits.h中定义)将适用
如果你想要一个大数字,请使用1000 ....... 0000L将其定义为长。
答案 1 :(得分:4)
限制在numeric_limits
类中定义。
答案 2 :(得分:2)
有一个依赖于实现的最大值,但是如果你溢出了 常数运算,执行是需要发出的 诊断(错误信息)。
答案 3 :(得分:1)
编译器将使用最合适的大小,具体取决于常量的位置。如果它太大,您将收到编译器错误。
答案 4 :(得分:0)
每种类型(int,long,float,double)都具有与机器相关的最大值。
符合IEEE标准的浮点值和双精度值如果无法处理该值,将为您提供NaN或无穷大。