32

64 ビット データ モデルにはさまざまな種類 (LLP64/IL32P64、LP64/I32LP64、ILP64、SILP64) がありますが、64 ビット符号なし整数リテラルを指定する標準準拠の方法は何ですか?

ULL のサフィックスを指定するだけで十分でしょうか? それとも、一部のデータ モデルでリテラルが 128 ビットとして解釈されることになるのでしょうか?

4

4 に答える 4

42

ある場合は、使用する必要<cstdint> / <stdint.h>があります。これにより、次のことが得られます。

  • uint64_tサイズが64ビットの符号なし整数型です
  • UINT64_C()uint64_tマクロに適切な接尾辞を追加させることにより、タイプ の定数を作成するためのマクロです。
于 2012-10-31T13:53:25.763 に答える
2

私の知る限りでは、整数リテラルを特定のビット幅にサフィックスする方法はありません。あなたの唯一のオプションは、l、ul、ll、および ull です。

それについて偏執的である場合は、 /#ifのサイズをチェックしてリテラルをラップする必要があります。longlong long

繰り返しになりますが、KennyTM が上で指摘したように、リテラル64 ビットの範囲内にあり、64 ビットの値に割り当てられている限り、リテラル自体が 64 ビットか 128 ビットかは問題ではありません。

于 2012-10-31T13:26:59.557 に答える
2

ほとんどの場合、それは問題ではありません。接尾辞を付けない場合、整数リテラルの型はその値によって決定されます。コンパイラに 32 ビットunsigned longと 64ビットがある場合unsigned long long、大きすぎて に収まらunsigned longないが、大きすぎない符号なし値のunsigned long long型は になりますunsigned long long

于 2012-10-31T13:42:41.947 に答える
1

CおよびC++には、標準化された32/64/128ビット変数タイプがありません。たとえば、一部のシステムでは32ビット、その他のシステムでは64ビットが長くなります。面倒ですが、ほとんどのOSには、などのより優れたtypedefが用意されているuint32ため、必要なタイプを正確に選択する必要があります。

これは優れたconfigureスクリプトの仕事です。システムが提供するものを判別し、それが機能することをテストし、実行している適切なアーキテクチャーに適切なタイプを選択するのに役立ちます。

于 2012-10-31T13:32:33.367 に答える