これは次の質問に関連しています、
ほとんどのプラットフォームでintは常に32ビットであると言う人もいます。これが本当かどうか知りたいです。
異なるサイズのintを持つ最新のプラットフォームを知っていますか? 8ビットまたは16ビットアーキテクチャの恐竜プラットフォームは無視してください。
注:他の質問から32ビット整数を宣言する方法はすでに知っています。これは、他のサイズの整数をサポートしているプラットフォーム(CPU/OS /コンパイラ)を見つけるための調査のようなものです。
何人かの人が述べているように、「int」が32ビットになるという保証はありません。特定のサイズの変数を使用する場合、特にビット操作を伴うコードを作成する場合は、必須の「標準整数型」を使用する必要があります。 c99仕様による。
int8_t
uint8_t
int32_t
uint32_t
等...
それらは一般に[u] intN_tの形式であり、「u」は符号なしの量が必要であることを指定し、Nはビット数です。
これらの正しいtypedefは、コンパイルするプラットフォームのstdint.hで利用できるはずです。これらを使用すると、優れたポータブルコードを記述できます:-)
「常に 32ビットオンほとんどプラットフォーム」-そのスニペットの何が問題になっていますか? :-)
C標準は、その整数型の多くのサイズを義務付けていません。 does相対的なサイズを義務付けます。たとえば、sizeof(int) >= sizeof(short)
などです。また、最小範囲が義務付けられていますが、複数のエンコードスキーム(2の補数、1の補数、および符号/大きさ)が可能です。
特定のサイズの変数が必要な場合は、次のような#ifdef
の使用など、実行しているプラットフォームに適した変数を使用する必要があります。
#ifdef LONG_IS_32BITS
typedef long int32;
#else
#ifdef INT_IS_32BITS
typedef int int32;
#else
#error No 32-bit data type available
#endif
#endif
または、C99以降では、正確な幅の整数型intN_t
およびuintN_t
を使用できます。
typedef
name intN_t
は、幅N
、パディングビットなし、2の補数表現の符号付き整数型を指定します。したがって、int8_t
は、正確に8ビットの幅を持つ符号付き整数型を示します。typedef
name uintN_t
は、幅N
の符号なし整数型を指定します。したがって、uint24_t
は、正確に24ビットの幅を持つ符号なし整数型を示します。typedef
を定義する必要があります。名前。現時点では、ほとんどのデスクトップおよびサーバープラットフォームは32ビット整数を使用しており、多くの組み込みプラットフォーム(ハンドヘルドARMまたはx86)は32ビットint
sを使用していると考えてください)も使用しています。 16ビットのint
に到達するには、実際に非常に小さくする必要があります。「Berkeley mote」または、より小さなAtmel Atmegaチップのいくつかを考えてみてください。しかし、それらはそこにあります。
いいえ。小さな組み込みシステムは16ビット整数を使用します。
それはあなたのコンパイラに大きく依存します。 64ビットマシンで64ビットとしてコンパイルするものもあれば、32ビットとしてコンパイルするものもあります。組み込みシステムは、独自の小さな特殊なワックスボールです。
あなたがチェックするためにできる最善のこと:
_printf("%d\n", sizeof(int));
_
sizeof
はバイトを出力することに注意してください。 sizeof(int)*CHAR_BIT
を実行してビットを取得します。
さまざまなタイプのビット数を出力するコード:
_#include <limits.h>
#include <stdio.h>
int main(void) {
printf("short is %d bits\n", CHAR_BIT * sizeof( short ) );
printf("int is %d bits\n", CHAR_BIT * sizeof( int ) );
printf("long is %d bits\n", CHAR_BIT * sizeof( long ) );
printf("long long is %d bits\n", CHAR_BIT * sizeof(long long) );
return 0;
}
_
さて、ほとんどのARMベースのプロセッサは、16ビットモードであるThumbコードを実行できます。これには、まだ噂されているAndroidノートブックと最先端のスマートフォンが含まれます。
また、一部のグラフ電卓は8ビットプロセッサを使用しており、それらもかなり最新のものと呼んでいます。
TIは、主にビデオのデコードに使用されるC55xDSPを搭載したOMAPボードを引き続き販売しています。このために提供されているコンパイラには16ビット整数があると思います。 32ビットDSPを入手できますが、恐竜ではありません(Nokia 770は2005年にリリースされました)。
作成するほとんどのコードは、DSPで実行されることはないと安全に想定できます。しかし、おそらくすべてではありません。
ビット数ではなく実際の最大/最小値にも関心がある場合は、 limits.h に知りたいことのほとんどすべてが含まれています。