Подтвердить что ты не робот

Существуют ли типы типа long long int в С++?

Существуют ли типы, большие, чем long long int в С++?

Мой компилятор - g++.

4b9b3361

Ответ 2

В зависимости от вашей потребности вы можете создать свою собственную структуру для обработки типа данных:

#include <cstdint>

struct uint256_t
{
    std::uint64_t bits[4];
};

uint256_t x;

Ответ 3

Нет, но вы можете использовать библиотеки, такие как GMP для обработки больших чисел.

Ответ 4

__int128
__uint128

Ответ 5

Стандарты

Расширенные целочисленные типы явно разрешены стандартами C и С++.

С++ 11

С++ 11 Проект N3337 3.9.1 В разделе "Основные типы" в пункте 3 говорится:

Существует пять стандартных стандартных целочисленных типов: "подписанный char", "короткий int", "int", "long int" и "long long int". В этом списке каждый тип содержит как минимум столько же памяти, сколько и предшествующие ему в списке. Могут также существовать расширенные знаковые целочисленные типы с реализацией. Стандартные и расширенные со знаком целочисленные типы совместно называются целыми типами со знаком. Plain ints имеют естественный размер, предложенный архитектурой среды исполнения, для обеспечения особых потребностей предоставляются другие подписанные целочисленные типы.

Вы также должны рассмотреть intmax_t, который в пункте 18.4.1 "Краткий обзор заголовка" гласит:

Заголовок определяет все функции, типы и макросы так же, как 7.18 в стандарте C.

C99

C99 N1256 проект явно разрешает их в пункте 6.2.5 "Типы":

Существует пять стандартных стандартных целочисленных типов, обозначенных как подписанные char, short int, int, long int и long long int. (Эти и другие типы могут быть назначенные несколькими дополнительными способами, как описано в 6.7.2.) Могут также быть расширенные со знаком целочисленные типы, определенные реализацией .28) Стандартные и расширенные целые типы со знаком со знаком называются целыми типами со знаком .29)

и 7.18.1.5 "Целые числа наибольшей ширины" в пункте 1 говорится:

Следующий тип обозначает целочисленный тип со знаком, способный представлять любое значение любого целочисленного типа со знаком:

intmax_t

Ответ 6

Резюмируя...

Если вам нужно сохранить точные целочисленные значения, которые не будут вписываться в "long long", gcc предлагает тип __ int128. Это расширение gcc, а не часть стандартного С++ (начиная с этой записи).

Если вам нужно работать с еще большими точными целыми значениями, вам, вероятно, понадобится арифметический пакет произвольной точности, например GMP. Если ваша потребность очень ограничена, вы можете использовать собственный расширенный код точности, но это может стать более сложным (и менее эффективным и надежным), чем использование существующей библиотеки.

Если вам нужно хранить большие числа, но вам не нужно хранить большие значения в точности, вы можете использовать float или double: они могут представлять числа намного большего размера но с меньшим precision.

И, конечно, если вы просто хотите увеличить объем памяти, объявите массив; -)

Ответ 8

Если вы знаете, что ваш номер всегда будет положительным, вы можете расширить область int, пометив ее как unsigned

int myNum; // Range is from –2,147,483,648 to 2,147,483,647

unsigned int myNum; // Range is from 0 to 4,294,967,295