2016-11-15 151 views
-2

我不明白printf函数lll长度说明的区别:为什么“L”和“LL”修饰符做同样的printf(C)

printf("%ld \n", 9999999991474836499); 
printf("%lld \n", 9999999991474836499); 

两个printf的使同样的输出,因为该类型的溢出:

-8446744082234715117                                                    
-8446744082234715117 

所以,当我删除一个数字我做的:

printf("%ld \n", 999999999147483649); 
printf("%lld \n", 999999999147483649); 

我得到相同的输出:

999999999147483649                                                     
999999999147483649 

没有溢出。

我不明白l意思是long intll那么平均long long int为什么他们没有什么区别?

+1

是什么'长int'和'长的长整型之间的区别'在你的平台上? –

+0

我使用这个在线编译器来执行我的测试:https://www.tutorialspoint.com/compile_c_online.php – Sadek

+1

对你的程序有帮助的补充是:'printf(“%zu%zu \ n”,sizeof( long),sizeof(long long));'如果它们是相同的,那就是为什么输出是原样的。 – eddiem

回答

3

在某些计算机上,longlong long具有相同的表示,所以lll做同样的事情。对于除Windows以外的大多数64位平台都是如此。 (这是解释为什么它以这种方式工作,而不是承诺它必须以这种方式工作。)

在其他平台-64位Windows上,32位任何东西,你都不会那么幸运。

程序错误的方式之一,它只是发生偶然工作,并不能保证它将继续工作,即使在同一个平台上。

1

“%ld”不保证处理64位整数。 “%lld”是。

在C库中的许多实现,没有什么区别,但有些平台可能不与%ld的打印大64位数字