为什么 'l' 和 'll' 修饰符对 printf 做同样的事情 (C)
Why 'l' and 'll' modifier do the same for printf (C)
我不明白 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
为什么他们没有任何区别?
在某些计算机上,long
和 long long
具有相同的表示形式,因此 ll
和 l
做同样的事情。大多数 64 位平台都是如此,Windows 除外。 (这是对它为何以这种方式工作的解释,而不是它必须以这种方式工作的承诺。)
在其他平台上——64 位 Windows、32 位任何东西,你就没那么幸运了。
无论哪种方式,该程序都不正确,它只是碰巧偶然运行,并且不能保证它会继续运行,即使在同一平台上也是如此。
“%ld”不能保证处理 64 位整数。
“%lld”是。
在 C 库的许多实现中,没有区别,但某些平台可能无法使用 %ld
打印大的 64 位数字
我不明白 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
为什么他们没有任何区别?
在某些计算机上,long
和 long long
具有相同的表示形式,因此 ll
和 l
做同样的事情。大多数 64 位平台都是如此,Windows 除外。 (这是对它为何以这种方式工作的解释,而不是它必须以这种方式工作的承诺。)
在其他平台上——64 位 Windows、32 位任何东西,你就没那么幸运了。
无论哪种方式,该程序都不正确,它只是碰巧偶然运行,并且不能保证它会继续运行,即使在同一平台上也是如此。
“%ld”不能保证处理 64 位整数。 “%lld”是。
在 C 库的许多实现中,没有区别,但某些平台可能无法使用 %ld
打印大的 64 位数字