有什么区别
long int numberOfPoints = 131071100;
和
long int numberOfPoints = 131071100L;
并且是一个赋值,例如
int numberOfPoints = 131071100L;
合法的?如果是的话,那和前两者有什么区别?
最佳答案
像131071100
这样的无后缀整数常量的类型是int
、long int
和long long int<中的第一个
其中可以表示它的值。 131071100
的值始终在数学上是正确的;只是它的类型不同(因为 long int
至少是 32 位,所以它总是 int
或 long int
)。
带L
后缀的,是long int
或long long int
类型;同样,该值始终是正确的——并且 131071100L
始终是 long int
类型。
用不同数值类型的表达式初始化某种算术类型的对象是完全有效的。该值被隐式转换为目标类型。在这种情况下,由于目标类型是 long int
,因此不存在溢出风险。
对于您的特定情况,唯一之间的区别
long int numberOfPoints = 131071100;
和
long int numberOfPoints = 131071100L;
是后者稍微明确一点;意思完全一样。
如果表达式比单个常量更复杂,则仍然需要 L
后缀。例如,如果您这样写:
long int foo = 1024 * 1024 * 1024;
那么每个常量 1024
都是 int
类型——整个表达式也是如此。如果 int
恰好是 16 位,则乘法将溢出,即使 数学 结果适合 long int
。 (文字的类型根据其值进行调整;大型表达式的类型则不然。)为避免该问题,您可以这样写:
long int foo = 1024L * 1024L * 1024L;
关于c - C编程中数据类型 `long`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23069236/