Попробуйте:
printf("%lld\n", value);
Проблема с вашим кодом состоит в том, что %d
предполагает, что выводимый аргумент будет целым числом.Поэтому printf
будет рассматривать только несколько байтов вашего числа, а не все число, и то, что он видит там, эквивалентно 705032704 в двоичном формате.
Вы можете проверить это самостоятельно: 5000000000 в двоичном виде выглядит следующим образом(границы байтов помечены |
):
1|00101010|00000101|11110010|00000000
В Objective C целые числа хранятся в 4 байтах, поэтому Objective C просматривает последние 4 байта, что в точности равно 705032704. (Примечаниечто 705032704 = 5000000000 - 2 32 , что составляет последний бит в крайнем левом байте, который был потерян).