77

128 ビット長のUUIDを変数に格納する必要があります。C++ に 128 ビットのデータ型はありますか? 算術演算は必要ありません。値を簡単に保存して非常に高速に読み取りたいだけです。

C++11 からの新機能も問題ありません。

4

7 に答える 7

71

GCC は を提供します__int128が、128 ビットを保持するのに十分な幅の整数モードを持つターゲット (プロセッサ) に対してのみサポートされます。特定のシステムで sizeof()intmax_tuintmax_t実行し、コンパイラとプラットフォームがサポートする最大値を決定します。

于 2016-01-26T23:41:30.847 に答える
46

GCC と Clang のサポート__int128

于 2015-11-20T14:07:45.403 に答える
44

チェックアウトブーストの実装:

#include <boost/multiprecision/cpp_int.hpp>

using namespace boost::multiprecision;

int128_t v = 1;

これは、特に算術演算を行う必要がある場合は、文字列や配列よりも優れています。

于 2013-08-26T08:17:42.857 に答える
12

あなたの質問には 2 つの部分があります。

1.128-bit整数。@PatrikBeckが示唆してboost::multiprecisionいるように、本当に大きな整数には良い方法です。

2.保存する変数UUID/ GUID/CLSIDまたはあなたがそれを呼ぶものは何でも。この場合boost::multiprecision、良い考えではありません。そのために設計されたGUID 構造が必要です。クロスプラットフォーム タグが追加されたので、その構造をコードにコピーして、次のようにすることができます。

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

この形式は、内部的な理由から Microsoft によって定義されています。次のように簡略化することもできます。

struct GUID
{
    uint8_t Data[16];
};

さまざまなものを処理できるオブジェクトよりも、単純な構造の方がパフォーマンスが向上します。とにかく、GUIDS で数学を行う必要はないので、派手なオブジェクトは必要ありません。

于 2015-11-20T13:58:02.037 に答える
1

テンプレートを使用して、符号付き 128ビット整数または符号なし 128 ビット整数であるために、TBigIntegerこのようにテンプレート配列に任意のビット範囲を設定します。TBigInt<128,true>TBigInt<128,false>

おそらく返信が遅くなり、他の誰かがこの方法をすでに見つけていることを願っています。

TBigInt はUnreal Engineによって定義された構造です。マルチビット整数オーバーライドを提供します。

基本的な使用法(私が知る限り):

#include <Math/BigInt.h>

void foo() {
    TBigInt<128, true> signed128bInt = 0;
    TBigInt<128, false> unsigned128bInt = 0;
}
于 2018-12-15T21:30:06.453 に答える