C编程中的数据类型`long`

时间:2014-04-14 20:01:44

标签: c

有什么区别 long int numberOfPoints = 131071100;long int numberOfPoints = 131071100L;

并且是如此的作业 int numberOfPoints = 131071100L; 法律?如果它与前两个有什么区别呢?

2 个答案:

答案 0 :(得分:3)

131071100之类的非整数常量类型是intlong intlong long int中的第一个,其值可以表示。 131071100的值始终在数学上是正确的;只有它的类型不同(因为long int至少是32位,所以它始终是intlong int

使用L后缀,其类型为long intlong 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;

答案 1 :(得分:1)

(此前的答案不正确并已修改。)

根据ANSI C规范(C99和C ++规范中存在类似语言):

  

整数常量的类型是相应列表的第一个   其值可以表示。

     

无符号十进制:int,long   int,unsigned long int。

     

Unsuffixed octal或hexadecimal:int,unsigned   int,long int,unsigned long int。

     

后缀为字母u或U:unsigned int,unsigned long int。

     

后缀为字母l或L:long   int,unsigned long int。

     

后缀为字母u或U和l或L:unsigned long int。

因此,两个表达式之间没有任何区别,因为C保证常量的类型足够长以保存该值。