我不理解printf函数的l
和ll
长度说明符之间的区别:
printf("%ld \n", 9999999991474836499);
printf("%lld \n", 9999999991474836499);
两个printf的输出相同,因为类型溢出:
-8446744082234715117
-8446744082234715117
所以当我删除一个数字时,我会这样做:
printf("%ld \n", 999999999147483649);
printf("%lld \n", 999999999147483649);
我得到相同的输出:
999999999147483649
999999999147483649
没有溢出。
我不明白l
意味着long int
而ll
意味着long long int
所以为什么它们没有任何区别?
答案 0 :(得分:3)
在某些计算机上,long
和long long
具有相同的表示形式,因此ll
和l
执行相同的操作。大多数64位平台都是如此,除了Windows。 (这是为什么它以这种方式工作的解释,而不是它必须以这种方式工作的承诺。)
在其他平台上 - 64位Windows,32位任何东西,你都不会那么幸运。
程序不正确,它只是发生偶然工作,并且无法保证它会继续工作,即使在同一平台上也是如此。
答案 1 :(得分:1)
“%ld”无法保证处理64位整数。 “%lld”是。
在C库的许多实现中,没有区别,但某些平台可能无法使用%ld打印大型64位数字