2016-11-15 12 views
-2

я не понимаю разницы между l и ll длиной спецификатором для функции PRINTF:Почему «л» и модификатор «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 так почему же они не отличаются?

+1

В чем разница между 'длинной int' и' длинным длинным междунаром 'на вашей платформе? –

+0

Я использую этот онлайн-компилятор для выполнения своих тестов: https://www.tutorialspoint.com/compile_c_online.php – Sadek

+1

Полезным дополнением к вашей программе будет: 'printf ("% zu% zu \ n ", sizeof (long), sizeof (long long)); 'Если они одинаковы, поэтому выход такой, какой есть. – eddiem

ответ

3

На некоторых компьютерах, long и long long имеют такое же представление, так ll и l делать то же самое. Это справедливо для большинства 64-разрядных платформ, кроме Windows. (Это объяснение, почему это сработало таким образом, а не обещание, что оно должно работать таким образом.)

На других платформах - 64-битная Windows, 32-разрядная, вам не повезет.

Программа неверна в любом случае, это просто произошло, чтобы работать случайно, и нет гарантии, что он будет продолжать работать, даже на той же платформе.

1

«% ld» не может обрабатывать 64-битные целые числа. "% lld" есть.

Во многих реализациях библиотеки C, нет никакой разницы, но на некоторых платформы не могут печатать большие 64-битные числа с% л.д.

 Смежные вопросы

  • Нет связанных вопросов^_^