C の通常のデータ型には、特定のビット幅ではなく最小範囲の値があります。たとえば、ashort
は、少なくとも -32767 から 32767 までを表すことができなければなりません。
そうです、あなたのコードが 32768 でラップアラウンドする値に依存している場合、ショートが大きな 128 ビットの巨獣であるとうまく動作しない可能性があります。
特定の幅のデータ型が必要な場合は、などを調べてstdint.h
くださいint64_t
。特定の幅、「少なくとも」幅など、さまざまな選択肢があります。また、「通常の」整数型とは異なり、これらには 2 の補数が必要です。
- 特定の正確な幅を持つ整数型。
- 少なくとも特定の指定された幅を持つ整数型。
- 少なくとも特定の指定された幅を持つ最速の整数型。
- オブジェクトへのポインターを保持するのに十分な幅の整数型。
- 最大幅を持つ整数型。
たとえば、次からC11 7.20.1.1 Exact-width integer types
:
typedef 名 intN_t は、幅 N、パディング ビットなし、および 2 の補数表現の符号付き整数型を指定します。したがって、int8_t は、正確に 8 ビット幅の符号付き整数型を示します。
ルール (ポインターを整数にキャストしないなど) に従っていれば、コードはどのような実装やアーキテクチャでもコンパイルおよび実行されるはずです。
そうでない場合は、デバッグを開始してから、問題を引き起こしていると思われる詳細情報とコードをそのような専用のフォーラム サイトに投稿するだけです。最近、どこでそれらの1つを見ましたか?:-)