さまざまなタイプの64ビットデータモデル(LLP64/IL32P64、LP64/I32LP64、ILP64、SILP64)があるので、64ビット符号なし整数リテラルを指定する標準準拠方法は何ですか?
ULLのサフィックスを指定するだけで十分ですか?または、一部のデータモデルでリテラルが128ビットとして解釈されることになりますか?
_<cstdint> / <stdint.h>
_があれば、それを使用する必要があります。これにより、以下が得られます。
uint64_t
_は、サイズが64ビットの符号なし整数型ですUINT64_C()
は、マクロに適切なサフィックスを追加することにより、タイプ_uint64_t
_の定数を作成するためのマクロです。CおよびC++には、標準化された32/64/128ビット変数型がありません。たとえば、一部のシステムでは32ビットで、他のシステムでは64です。面倒ですが、ほとんどのOSはuint32
など、より良いtypedefを提供してくれるので、必要な正確な型を選択することができます。
これは優れたconfigure
スクリプトの仕事です。システムが提供するものを決定し、それが機能することをテストし、実行している適切なアーキテクチャに適切なタイプを選択するのに役立ちます。
私の知る限り、整数リテラルを特定のビット幅に接尾する方法はありません。唯一のオプションはl、ul、ll、およびullです。
あなたがそれについて妄想している場合、long
/#if
のサイズをチェックするlong long
でリテラルをラップする必要があります。
繰り返しますが、KennyTMが上記で指摘したように、リテラルareが64ビットの範囲にある場合およびが64ビット値に割り当てられている限り、リテラル自体がそれほど重要ではありません64ビットまたは128ビット、またはそれですか?
ほとんどの場合、それは重要ではありません。接尾辞を付けない場合、整数リテラルのタイプはその値によって決まります。コンパイラに32ビットのunsigned long
と64ビットのunsigned long long
がある場合、unsigned long
には収まらないがunsigned long long
には大きすぎない符号なしの値はunsigned long long
型になります。