Попытка напечатать длинную без знака, но получить другой номер - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть простая программа на Си.Я пытаюсь напечатать число 1528108405744583338 .

Вот простой код, который у меня есть;

#include<stdio.h>
#include<stdlib.h>

int main()
{
    unsigned long number = 1528108405744583338;
    printf("%lu", number );
    return 0;
}

Когда я запускаю этот код, на консоли я получаювывод как 2930885290 .Что здесь происходит?Я пробовал это в средах Dev-C ++, C-Free 5.0, но в обоих случаях получил одинаковый результат.Я проверил похожие посты и попробовал пути решения, но ответы не помогли мне решить мою проблему.Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 30 ноября 2018

Для рассматриваемого значения требуется 64-битный тип данных, а unsigned long не обязательно 64-битный.Гарантируется, что он будет не менее 32 бит.Поэтому, если ваша система использует 32-битное значение для unsigned long, вы получите полученное значение, а если она использует 64-битное значение для unsigned long, вы получите ожидаемое значение.

An unsigned long longгарантированно будет содержать это значение, поэтому используйте его вместо этого.

#include<stdio.h>
#include<stdlib.h>

int main()
{
    unsigned long long number = 1528108405744583338ULL;
    printf("%llu", number );
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...