64-битные операции - PullRequest
0 голосов
/ 03 июня 2011

Я пишу код для функции тестирования простоты, которая обрабатывает long long int. Нужно ли использовать специальные операторы для таких больших чисел? Есть ли какая-либо документация, касающаяся манипулирования большим числом в C? Я использую стандартную библиотеку gnu.THANKS.

Ответы [ 6 ]

3 голосов
/ 03 июня 2011

Если ваш компилятор поддерживает длинные длинные целые, вам не нужно делать никаких «особых» вещей.Если ваш процессор не поддерживает 64-битные типы (возможно, 32-битный процессор), компилятор будет эмулировать эту функцию, используя последовательности кода сборки, который разбивает 64-битные операции на 32-битные.

3 голосов
/ 03 июня 2011

Нет, вам не нужно делать ничего особенного.Вы обрабатываете long long int точно так же, как вы обрабатываете int.Просто остерегайтесь переполнений, как с каждым собственным целочисленным типом.

1 голос
/ 03 июня 2011
* Long * long - это новое в C99, хотя до этого многие компиляторы поддерживали его как расширение.

С gcc long long составляет 64 бита, вы можете использовать его как любой другой целочисленный тип, ничего особенного не требуется.

Однако следует помнить о нескольких вещах: целочисленные константы в исходном коде нуждаются в суффиксе LL (или LLU, если он не подписан, например, вы должны сделать

long long foo = 123412341234123LL;

а не

long long foo = 123412341234123;

Аналогично, для вывода long long с семейством printf, вы должны использовать спецификатор преобразования "% lld" вместо "% d" или "% ld" (или "% llu", если он не подписан), например

printf("foo = %lld",foo);

Есть несколько документов о long long в gcc здесь

1 голос
/ 03 июня 2011

Если компилятор поддерживает long long int, он работает со стандартными операторами.

Кстати, long long int - это 128 бит на 64-битных единицах (где только long - 64 бит).Используйте int64_t из <stdint.h>, если вам нужны 64-битные версии на всех платформах.Это не относится к 64-битным окнам, где long по-прежнему 32 бита, а long long - 64 бита.

0 голосов
/ 03 июня 2011

Посмотрите библиотеку GMP: http://gmplib.org/

0 голосов
/ 03 июня 2011

Если вы просто обрабатываете long long int, вам не нужно ничего особенного, если ваш компилятор поддерживает это. Позаботьтесь о переполнении при добавлении и умножении двух long long int s

Для работы с очень большими числами (диапазон намного больше, чем у long long int) посмотрите Библиотека GNU MP BigNum

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...