3

64ビット定数をとして割り当てる

int64_t foo = 0x1234LL;

必ずしもポータブルでlong long はないため、ポータブルではありませんint64_t。この投稿どの初期化子がint64_tに適していますか?INT64_C()からのマクロの使用について説明しますが、として<stdint.h>使用することもできませんstatic_cast

int64_t foo = static_cast<int64_t>(0x1234);

どちらを選ぶべきか、そしてその理由、または両方ともうまく機能しますか?

static_castインターネットとSOで検索しましたが、オプションが検討されている場所は見つかりませんでした。sizeof()また、単純なケースで機能することを確認するためにを使用してテストを行いました。

4

1 に答える 1

6

実際にlong longは、C実装制限ヘッダーによって少なくとも64ビットであることが保証されています<climits>。タイプのオブジェクトの最小値と最大値の最小制限は、次のlong longように与えられます。

LLONG_MIN   -9223372036854775807 // −(2^63 − 1)
LLONG_MAX   +9223372036854775807 // 2^63 − 1

これは、符号付き64ビット整数に対応します。少なくとも64情報ビットがなければ、このような範囲の値を格納することはできません。

だから先に進んで、を使用して0x1234LLください。実際、値に適合する次のタイプの最初のものが選択されるため、サフィックスを使用しないこともできます。

Suffix | Decimal constants | Octal or hexadecimal constant
-------|-------------------|------------------------------
none   | int               | int
       | long int          | unsigned int
       | long long int     | long int
       |                   | unsigned long int
       |                   | long long int
       |                   | unsigned long long int
...    | ...               | ...
于 2013-02-10T14:33:02.163 に答える