编译器在将常量相乘时可以处理的数字大小是否有显式定义的限制?数字限制 - 乘以非常大的常量时是否有限制?
#define val1 1000000000000000
#define val2 <some really really big number>
std::cerr << val1 * val2 << std::endl;
这会产生一个错误,由于数值限制在c + +给定一个足够大的val2值吗?如果有的话,那里/如何定义这个限制?
编译器在将常量相乘时可以处理的数字大小是否有显式定义的限制?数字限制 - 乘以非常大的常量时是否有限制?
#define val1 1000000000000000
#define val2 <some really really big number>
std::cerr << val1 * val2 << std::endl;
这会产生一个错误,由于数值限制在c + +给定一个足够大的val2值吗?如果有的话,那里/如何定义这个限制?
这将是治疗作为一个整数,所以最大整数(limits.h定义)将适用
如果你想大量使用1000 ....... 0000L将其定义为长。
每种类型(int,long,float,double)都有一个依赖于机器的最大值。
符合IEEE标准的浮点和双精度值如果无法处理该值,将给予NaN或无穷大。
该限制在numeric_limits
类中定义。
编译器将根据常量的位置使用最合适的大小。如果它太大,你会收到一个编译器错误。
有一个取决于实现的最大值,但如果你在 算法中溢出,则需要执行该操作才能发出 诊断(错误消息)。
如果'val2'也是一个'int'表达式,则返回true。根据实现情况,“long”可能大于或不可能大于“int”。 –