2012-12-31 173 views

回答

10

它是一个整数常量,它具有long int类型而不是int

C11,§6.4.4.1整数常数#1

长后缀:l之一L

+0

谢谢,由于代表低,我无法向您提供帮助 – JeremyL

+1

* long int n = 2147483648:如果int为32位(或更少),则会出现溢出*。你在说什么?在C99和C11中,如果'2147483648'不能放入'int',那么它的类型就是'long'或'long long'(它可以放在第一个位置)。见C99和C11中的6.4.4.1p5。 – ouah

+1

“此规则在C99和C11中不存在”规则仍然存在于C99和C11中,包含'long long'的类型列表尝试使用,它们对于十进制和八进制/十六进制是不同的,包括小数点后的任何无符号类型。除此之外,它仍然是相同的规则,并且'long int n = 2147483648'不是未定义的。存在一种可以表示'2147483648'的类型(因为它可以用long long来表示),如果'long int'太窄而无法保存,则转换为'long int'的实现定义更糟糕。 –

3

L后缀使得它long代替的int字面 - 它可以应用到基本上任何数字(但如果数量足够大,以至于它不适合int,它无论你是否包含后缀,都将是一个long)。

+0

谢谢,由于代表低,我无法向您表示谢谢 – JeremyL

3

0L表示long格式中的0。

+0

谢谢,由于代表低,我无法赞扬您 – JeremyL

+0

@JeremyL:现在您可以! ;-) – md5

3

C99 Standard(草案的PDF),所描述的后缀是在6.4.4.1(整数后缀)和6.4.4.2(浮动后缀)

整数后缀是uunsigned),l(小写L) (long),lllong longulunsigned long),ullunsigned long long),lulong unsignedllulong long unsigned)和大写版本。

浮动后缀是ffloat)和llong double)和大写版本。

+0

谢谢,由于代表低,我无法向您提供帮助 – JeremyL