Можно ли реализовать 64-разрядные целые числа с помощью 32-разрядного компилятора? - PullRequest
2 голосов
/ 01 октября 2011

Хотя таких вопросов по переполнению стека уже много ( почти близко к тому, что я хочу знать ).Но никто из них не получил ответа, который бы раскрыл дело.

Мой вопрос в основном заключается в следующем:

Возможно ли реализовать 64-разрядные целые числа с помощью 32-разрядного компилятора?Какое значение имеет битовый размер компилятора при определении размера целого числа? (без учета проблем с производительностью)

Некоторые вопросы, которые уже были заданы, связаны с:

  1. целочисленный размер в c зависит от чего?

  2. Зависит ли размер int от компилятора и / или процессора?

  3. Что в стандарте C ++ указано размер типа int, long?

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

Ответы [ 4 ]

3 голосов
/ 01 октября 2011

int64_t - это целочисленный тип 64b, который доступен, если вы включите stdint.h. uint64_t - это версия без знака и определена в том же заголовке.

См. Определены ли типы, как uint32, int32, uint64, int64, в любом заголовке stdlib? для получения более подробной информации.

Можно ли реализовать 64-разрядные целые числа на 32-разрядной машине? (без учета проблем с производительностью)

Конечно. Обычно в этом нет необходимости, если вы не используете действительно ограниченный набор инструкций, но это определенно возможно. Как реализовать big int в C ++ объясняет, как создавать произвольные целые числа точности, что является исключительно сложной задачей для решения.

1 голос
/ 01 октября 2011

Да.Даже на 32-битных машинах .NET Framework предоставляет System.Int64, многие компиляторы C / C ++ предоставляют long long / __int64.

Очевидно, что операции на таких типах на 32-битных машинах так или иначе эмулируются (т.е. обычно требуется больше, чем инструкция, чтобы добавить два 64-битных целых числа).По этой причине они доступны, но не используются без необходимости (и по умолчанию размер int по умолчанию равен 32 битам).

0 голосов
/ 01 октября 2011

В Java int всегда 32-битный, а long - 64-битный, даже если на 8-битном компьютере.

0 голосов
/ 01 октября 2011

Да

В C их тип обычно называется long или long long.Или, если ваш компилятор для C99, вы можете использовать новые типы фиксированной ширины, определенные при #include <stdint.h> (или #include <inttypes.h>): int64_t, uint64_t, ...

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