В недавнем домашнем задании мне сказали использовать переменную 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, когда я не использовать литье?