В настоящее время я исправляю устаревшую ошибку в коде C. В процессе исправления этой ошибки я сохранил unsigned int
в unsigned long long
. Но, к моему удивлению, математика перестала работать, когда я скомпилировал этот код в 64-битной версии GCC
. Я обнаружил, что проблема в том, что когда я назначил значение long long
int, тогда я получил число, которое выглядело как 0x0000000012345678
, но на 64-битной машине это число стало 0xFFFFFFFF12345678
.
Может кто-нибудь объяснить мне или указать мне какую-то спецификацию или документацию о том, что должно произойти при хранении меньшего типа данных в более крупном, и, возможно, какой подходящий шаблон для этого делается на C?
Обновление - пример кода
Вот что я делаю:
// Results in 0xFFFFFFFFC0000000 in 64 bit gcc 4.1.2
// Results in 0x00000000C0000000 in 32 bit gcc 3.4.6
u_long foo = 3 * 1024 * 1024 * 1024;