Целые числа, превышающие 4294967295 в 32-битной Windows - PullRequest
4 голосов
/ 11 мая 2011

Я пытаюсь разобраться с основами C ++, создав простое приложение для арифметического калькулятора.Сейчас я пытаюсь выяснить, как сделать так, чтобы он мог работать с целыми числами, превышающими 4294967295 в 32-битной Windows.Я знаю, что встроенный калькулятор Windows способен на это.Что я пропустил?

Обратите внимание, что это приложение должно быть компилируемым с компилятором MSVC и g ++ (MinGW / GCC).

Спасибо.

Ответы [ 4 ]

7 голосов
/ 11 мая 2011

Если вы хотите быть совместимыми как с gcc, так и с msvc, используйте <<a href="http://en.wikipedia.org/wiki/Stdint.h"> stdint.h >.Это исходный код, совместимый с обоими.

Вы, вероятно, хотите для этого uint64_t.Это даст вам до 18 446 744 073 709 551 615.

Есть также библиотек , которые позволят вам получить целые числа, не превышающие объем памяти для обработки.

1 голос
/ 11 мая 2011

Используйте __ int64 для получения 64-битных вычислений int в Visual C ++ - хотя и не уверен, понравится ли это GCC.

Вы можете создать заголовочный файл, который напечатает (скажем) MyInt64 для соответствующей вещи для каждого компилятора. Тогда вы можете внутренне работать с MyInt64, и скомпилированный код будет правильным для каждой цели. Это довольно стандартный способ поддержки разных целевых компиляторов на одной исходной кодовой базе.

afai может сказать, long long будет работать нормально для обоих, но я не использовал GCC, поэтому YMMV - см. здесь для информации GCC и здесь для Visual C ++.

0 голосов
/ 11 мая 2011

Существуют разные решения, если 2 ^ 64 достаточно велико, вы можете использовать 64-битный целочисленный тип (это зависит от реализации, поэтому ищите ваш конкретный компилятор).С другой стороны, если вы хотите иметь возможность обрабатывать любой номер , вам придется использовать или реализовать тип BigInteger , который его инкапсулирует.Реализация представляет собой интересное упражнение ... в основном используют вектор меньшего типа, оперируют с каждым подэлементом, а затем объединяют и нормализуют результат.

0 голосов
/ 11 мая 2011

Вы также можете создать класс «Большое число», который будет в основном хранить значение для нескольких переменных в той или иной форме

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