Я работаю над проектом, включающим 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 компилятора установлена, так как я использую сетевые компьютеры в кампусе, и у меня нет разрешения получить доступ к основной файловой системе. Я не хочу должным быть приносить свой ноутбук в кампус каждый день. Помогите!Спасибо
В среде Microsoft используйте printf со следующим синтаксисом:
__int64 i64 = 10000000000; unsigned __int64 u64 = 10000000000000000000; printf ( "%I64d\n", i64 ); printf ( "%I64u\n", u64 ); printf ( "%I64d\n", u64 ); <-- note this typo
Как уже писали люди, вам следует проверить, какой компилятор вы используете. В коде: блоки, которые вы используете (в любом случае, в моей версии, надеюсь, это сработает и для вас):
Сначала узнайте какой компилятор выбран для вашего проекта, выбрав Проект-> Параметры сборки ... и посмотрите, что он говорит в «Выбранном компиляторе»
Затем выберите: Настройки-> Компилятор и отладчик ... и выберите компилятор, который вы только что узнали. Затем нажмите "Исполняемые файлы Toolchain" и посмотрите, что он говорит, например «Компилятор Си».
Может быть, если вы добьетесь успеха и опубликуете свои результаты, кто-то здесь сможет вам помочь.
Мм, Code :: Blocks использует GCC в качестве обычного компилятора. И последние версии явно поддерживают 64-битные типы.
Итак, вы сможете
#include <inttypes.h>
uint64_t unsigned64BitNumber;
int64_t signed64BitNumber;
Вы должны иметь возможность использовать long long int с компилятором gcc, но я думаю, что для этого может потребоваться использование кода c99 std, где по умолчанию может быть c89 режим. попробуйте добавить --std = c99 в командную строку компилятора и посмотрите, поможет ли это: -)
В дополнение к предыдущим комментариям о суффиксах и режиме gcc C99, если вы не можете заставить работать long long, И вам нужны только целые числа до 2^52, вы можете обойтись использованием double. Целые числа до 2^52 должны быть точно представлены в виде double, предполагая формат двойной точности IEEE (0 +1 экспонента смещения).
Когда компилятор компилирует ваш файл C и сталкивается с целочисленной константой или константой с плавающей запятой, ему необходимо присвоить ей тип. Он неявно выберет для вас тип по умолчанию. Вы можете явно указать тип, предоставив компилятору целочисленный суффикс . Целочисленный суффикс может сказать компилятору, какой это тип: длинный, длинный длинный или беззнаковый.
Типы с плавающей запятой также имеют такую ситуацию. Типом может быть float, double или long double. Тип с плавающей запятой обычно по умолчанию равен double.
Возможно, компилятор сбивает с толку часть типа данных int - пробовали ли вы вместо этого использовать long long
?
Этот веб-сайт может вам помочь.