В недавнем домашнем задании мне сказали использовать переменную long для хранения результата, так как это может быть большое число.
Я решил проверить, действительно ли это имеет значение для меня, в моей системе (intel core i5/64-bit windows 7/gnu gcc-компилятор) и выяснил, что следующий код:
printf("sizeof(char) => %d\n", sizeof(char));
printf("sizeof(short) => %d\n", sizeof(short));
printf("sizeof(short int) => %d\n", sizeof(short int));
printf("sizeof(int) => %d\n", sizeof(int));
printf("sizeof(long) => %d\n", sizeof(long));
printf("sizeof(long int) => %d\n", sizeof(long int));
printf("sizeof(long long) => %d\n", sizeof(long long));
printf("sizeof(long long int) => %d\n", sizeof(long long int));
выводит следующий результат:
sizeof(char) => 1
sizeof(short) => 2
sizeof(short int) => 2
sizeof(int) => 4
sizeof(long) => 4
sizeof(long int) => 4
sizeof(long long) => 8
sizeof(long long int) => 8
Другими словами, в моей системе int и long совпадают, и все, что будет слишком большим для int для удержания, будет слишком большим для long для сохранения.
Само по себе домашнее задание не является проблемой. Интересно, как в системе, где int < long, я должен назначить int длинным?
Я знаю, что там многочисленные близко связанные вопросы по этому вопросу, но я чувствую, что ответы внутри них не дают мне полного понимания того, что будет или может произойти в процессе.
В основном я пытаюсь выяснить следующее:
-  Должен ли я отбрасывать 
longдоintперед назначением илисон будет считаться нецелесообразным назначать напрямую?longэто не другой тип данных, а просто модификатор, -  Что происходит в системах, где 
long > int? Будет ли результат undefined (или непредсказуемый), или это вызовет дополнительные части переменная, которая должна быть опущена? -  Как выполняется кастинг от 
longдоintв C? -  Как назначение с 
longдоintработает на C, когда я не использовать литье?