'долгое длинное целое' интерпретируется как 'длинное целое'. Как я обхожу это?

Я работаю над проектом, включающим c программирующий для моего курса математики в университете. Я должен смочь обработать большие целые числа, больше, чем те, которые могут быть сохранены в типе данных 'длинного целого'. Таким образом, я пытался использовать 'долгое длинное целое', но если я пробую что-то вроде этого:

long long int number;
number = 10000000000;

Затем в сообщении об ошибке говорится 'ошибка: целочисленная константа, слишком большая для "длинного" типа'.

Я попробовал другие типы данных как '___ int64' и 'int_64t', который я попробовал включая все стандартные библиотеки для C, и я все еще получаю ту же проблему.

Странно, когда я пробую 'printf("LLONG_MAX = %lld\n", LLONG_MAX);', Я получаю это:

LLONG_MAX = -1

Я использую Codeblocks 8.02 на Windows XP, но я не уверен, какая версия gcc компилятора установлена, так как я использую сетевые компьютеры в кампусе, и у меня нет разрешения получить доступ к основной файловой системе. Я не хочу должным быть приносить свой ноутбук в кампус каждый день. Помогите!Спасибо

5
задан Eddy 10 March 2010 в 15:38
поделиться

8 ответов

В среде Microsoft используйте printf со следующим синтаксисом:

    __int64 i64 = 10000000000;
    unsigned __int64 u64 = 10000000000000000000;

    printf ( "%I64d\n", i64 );
    printf ( "%I64u\n", u64 );
    printf ( "%I64d\n", u64 ); <-- note this typo

1
ответ дан 18 December 2019 в 11:55
поделиться

Как уже писали люди, вам следует проверить, какой компилятор вы используете. В коде: блоки, которые вы используете (в любом случае, в моей версии, надеюсь, это сработает и для вас):

Сначала узнайте какой компилятор выбран для вашего проекта, выбрав Проект-> Параметры сборки ... и посмотрите, что он говорит в «Выбранном компиляторе»

Затем выберите: Настройки-> Компилятор и отладчик ... и выберите компилятор, который вы только что узнали. Затем нажмите "Исполняемые файлы Toolchain" и посмотрите, что он говорит, например «Компилятор Си».

Может быть, если вы добьетесь успеха и опубликуете свои результаты, кто-то здесь сможет вам помочь.

0
ответ дан 18 December 2019 в 11:55
поделиться

Мм, Code :: Blocks использует GCC в качестве обычного компилятора. И последние версии явно поддерживают 64-битные типы.

Итак, вы сможете

#include <inttypes.h>
uint64_t unsigned64BitNumber;
int64_t signed64BitNumber;
0
ответ дан 18 December 2019 в 11:55
поделиться

Добавьте ll в конец целочисленной константы.

3
ответ дан 18 December 2019 в 11:55
поделиться

Вы должны иметь возможность использовать long long int с компилятором gcc, но я думаю, что для этого может потребоваться использование кода c99 std, где по умолчанию может быть c89 режим. попробуйте добавить --std = c99 в командную строку компилятора и посмотрите, поможет ли это: -)

0
ответ дан 18 December 2019 в 11:55
поделиться

В дополнение к предыдущим комментариям о суффиксах и режиме gcc C99, если вы не можете заставить работать long long, И вам нужны только целые числа до 2^52, вы можете обойтись использованием double. Целые числа до 2^52 должны быть точно представлены в виде double, предполагая формат двойной точности IEEE (0 +1 экспонента смещения).

0
ответ дан 18 December 2019 в 11:55
поделиться

Когда компилятор компилирует ваш файл C и сталкивается с целочисленной константой или константой с плавающей запятой, ему необходимо присвоить ей тип. Он неявно выберет для вас тип по умолчанию. Вы можете явно указать тип, предоставив компилятору целочисленный суффикс . Целочисленный суффикс может сказать компилятору, какой это тип: длинный, длинный длинный или беззнаковый.

  • 10 неявно целое число со знаком
  • 10u, 10U явно целое число без знака
  • 10l, 10L явно длинное целое число со знаком
  • 10ll, 10LL или 10i64 на win32 явно длинное целое число со знаком
  • 10ull явно является беззнаковым длинным длинным

Типы с плавающей запятой также имеют такую ​​ситуацию. Типом может быть float, double или long double. Тип с плавающей запятой обычно по умолчанию равен double.

  • 10.0 неявно является двойным
  • 10.0f или 10.0F явно является числом с плавающей запятой
  • 10.0l или 10.0L явно является длинным двойным
11
ответ дан 18 December 2019 в 11:55
поделиться

Возможно, компилятор сбивает с толку часть типа данных int - пробовали ли вы вместо этого использовать long long ?

Этот веб-сайт может вам помочь.

0
ответ дан 18 December 2019 в 11:55
поделиться