variable type tipos long datos data cplusplus bool c++ performance types cross-platform uuid

type - short c++



¿Hay un número entero de 128 bits en C++? (4)

Implementación de Checkout boost :

#include <boost/multiprecision/cpp_int.hpp> using namespace boost::multiprecision; int128_t v = 1;

Esto es mejor que las cadenas y matrices, especialmente si necesita realizar operaciones aritméticas con él.

Necesito almacenar un UUID de 128 bits de longitud en una variable. ¿Hay un tipo de datos de 128 bits en C ++? No necesito operaciones aritméticas, solo quiero almacenar y leer fácilmente el valor muy rápido.

Una nueva característica de C ++ 11 estaría bien, también.


GCC y Clang soportan __int128


Tu pregunta tiene dos partes.

1. 128-bin entero de 128-bin bandejas. Como sugiere @PatrikBeck boost::multiprecision es una buena forma para enteros realmente grandes.

2. Variable para almacenar UUID / GUID / CLSID o como se llame. En este caso boost::multiprecision no es una buena idea. Necesita una estructura GUID diseñada para ese fin. Como se agregó una etiqueta multiplataforma, simplemente puede copiar esa estructura a su código y hacer que sea como sigue:

struct GUID { uint32_t Data1; uint16_t Data2; uint16_t Data3; uint8_t Data4[8]; };

Este formato está definido por Microsoft debido a algunos motivos internos, incluso puede simplificarlo para:

struct GUID { uint8_t Data[16]; };

Obtendrá un mejor rendimiento con una estructura simple en lugar de un objeto que pueda manejar un montón de cosas diferentes. De todos modos, no necesita hacer cálculos matemáticos con GUIDS, por lo que no necesita ningún objeto elegante.


Aunque GCC proporciona __int128 , solo se admite para objetivos (procesadores) que tienen un modo entero lo suficientemente amplio como para contener 128 bits. En un sistema dado, sizeof () intmax_t y uintmax_t determinan el valor máximo que admiten el compilador y la plataforma.