为什么';l';和';ll';修改器对printf(C)执行相同的操作
我不理解printf函数的为什么';l';和';ll';修改器对printf(C)执行相同的操作,c,printf,long-integer,libc,C,Printf,Long Integer,Libc,我不理解printf函数的l和ll长度说明符之间的区别: printf("%ld \n", 9999999991474836499); printf("%lld \n", 9999999991474836499); 由于类型溢出,两个printf产生相同的输出: -8446744082234715117
l
和ll
长度说明符之间的区别:
printf("%ld \n", 9999999991474836499);
printf("%lld \n", 9999999991474836499);
由于类型溢出,两个printf产生相同的输出:
-8446744082234715117
-8446744082234715117
因此,当我删除一个数字时,我会:
printf("%ld \n", 999999999147483649);
printf("%lld \n", 999999999147483649);
我得到了同样的结果:
999999999147483649
999999999147483649
没有溢出
我不明白
l
meanlong int
和ll
meanlong-long int
为什么它们没有任何区别呢?在一些计算机上,long
和long-long
有相同的表示,所以ll
和l
做同样的事情。这适用于除Windows以外的大多数64位平台。(这是对它为何如此运作的解释,而不是它必须如此运作的承诺。)
在其他平台上——64位Windows、32位任何东西——你都不会这么幸运
无论哪种方式,程序都是不正确的,它只是碰巧工作,并且不能保证它将继续工作,即使在同一平台上。%ld“不保证处理64位整数。
“%lld”是
在C库的许多实现中,没有区别,但是有些平台可能无法打印带有%ld的大64位数字,
long int
和平台上的long-long int
有什么区别?我正在使用这个在线编译器来执行我的测试:对您的程序的一个有用的补充是:printf(%zu%zu\n),sizeof(long),sizeof(long-long))代码>如果它们是相同的,这就是为什么输出是相同的。@eddiem是的,谢谢,我现在明白了为什么它会产生相同的输出:-)