回答:
整数のタイプごとに、異なる範囲のストレージ容量があります
Type Capacity
Int16 -- (-32,768 to +32,767)
Int32 -- (-2,147,483,648 to +2,147,483,647)
Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)
ジェームズ・サザーランドが彼の答えで述べたように:
int
そしてInt32
確かに同義です。int
少し見慣れInt32
たものになり、コードを読む人にとって32ビット性がより明確になります。Int32
サイズが重要な場合(暗号化コード、構造)、「整数」だけが必要な場合はintを使用する傾向があるので、将来のメンテナはint
、適切な場合に拡大しても安全であると認識しInt32
ますが、同じ方法で変数の変更に注意する必要があります。結果のコードは同じになります。違いは、単に可読性またはコードの外観の1つです。
int
C#で定義されているプリミティブデータ型です。
FCLタイプのInt32にマッピングされます。
これは値型であり、System.Int32構造体を表します。
署名され、32ビットを使用します。
最小値は-2147483648、最大値は+2147483647です。
Int16
FCLタイプです。
C#では、shortはInt16にマップされます。
これは値型であり、System.Int16構造体を表します。
署名されており、16ビットを使用します。
最小値は-32768、最大値は+32767です。
Int32
FCLタイプです。
C#では、intはInt32にマップされます。
これは値型であり、System.Int32構造体を表します。
署名され、32ビットを使用します。
最小値は-2147483648、最大値は+2147483647です。
Int64
FCLタイプです。
C#では、longはInt64にマップされます。
これは値型であり、System.Int64構造体を表します。
署名され、64ビットを使用します。
最小値は-9,223,372,036,854,775,808で、最大値は9,223,372,036,854,775,807です。
Int64
データ型が使用して表すことができるL
か、l
接尾辞ながら、Int16
またはInt32
C#での接尾辞を持っていません。
Jeffrey Richter(.NET Framework開発の寄稿者の1人)の本「CLR via C#」によれば、
intはC#コンパイラで許可されているプリミティブ型ですが、Int32はフレームワーククラスライブラリ型です(CLSに準拠する言語で利用可能)。実際、intはコンパイル時にInt32に変換されます。
また、
C#では、longはSystem.Int64にマップされますが、別のプログラミング言語では、longはInt16またはInt32にマップできます。実際、C ++ / CLIはInt32として長く扱います。
実際、ほとんどの(.NET)言語では、キーワードとして長く扱われず、それを使用するコードをコンパイルしません。
私はこの著者や、主にそのような相互運用性の懸念に関して、言語固有のプリミティブ型(つまり、int)よりもFCL型(すなわち、Int32)を好む.NETに関する多くの標準的な文献を見てきました。
何もない。タイプ間の唯一の違いは、サイズ(および、したがって、それらが表すことができる値の範囲)です。
16、32、64タイプに関する非常に重要な注記:
このクエリを実行すると... Array.IndexOf(new Int16 [] {1,2,3}、1)
あなたが求めているので、zero(0)を取得するとします... 1、2、または3の配列内で1です。回答として-1を取得する場合、1が1、2、または3の配列内にないことを意味します。
私が見つけたものをチェックしてください:次のすべては-1ではなく0を与えるはずです(私はすべてのフレームワークバージョン2.0、3.0、3.5、4.0でこれをテストしました)
C#:
Array.IndexOf(new Int16[]{1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32[]{1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64[]{1,2,3}, 1) = 0 (correct)
VB.NET:
Array.IndexOf(new Int16(){1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32(){1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64(){1,2,3}, 1) = -1 (not correct)
つまり、私のポイントは、Array.IndexOfの比較では、Int32のみを信頼することです。
short
れて配列に収まるようにし、2番目のリテラル1は通常のままにしint
ます。 (int)1
等しく考慮されていない(short)1
、(short)2
、(short)3
、従って結果は-1。
Array.IndexOf(new Int16(){1,2,3}, 1S)
Array.IndexOf(new Int32(){1,2,3}, 1I)
Array.IndexOf(new Int64(){1,2,3}, 1L)
できます。すべて期待どおりに機能します。
Object[],Object
オーバーロードを使用しています。C#は必要に応じint
て暗黙的にをa long
に引き上げます(また、a short
をint
orに引き上げますlong
)が、object
代わりにオーバーロードを使用して、暗黙的にキャストダウンしません。With Option Strict On
またはOff
VBは、統一された型が提供されている場合のみ型付きオーバーロードを使用しobject
ます。それ以外の場合は、オーバーロードを使用します。
for Array.IndexOf comparisons, only trust Int32!
は間違っています。最後の1
引数を対応する配列型にキャストすると、期待どおりに機能します。
編集:これは、C#にはまったく当てはまりません。この質問に答えたときに見逃したタグです。C#固有の回答がさらにある場合は、代わりに投票してください。
それらはすべて、さまざまなサイズの整数を表します。
ただし、非常に小さな違いがあります。
int16、int32、およびint64はすべて固定サイズです。
intのサイズは、コンパイル対象のアーキテクチャによって異なります。C仕様では、intがshort以上の値として定義されているだけですが、実際にはターゲットとするプロセッサの幅であり、これはおそらく 32ビットですが、そうではないかもしれません。
int
およびint32
1つと同じ(32ビット整数)int16
short int(2バイトまたは16ビット)int64
longデータ型(8バイトまたは64ビット)int
、はのエイリアスであるためInt32
、常に32ビットであることが保証されています。
どちらも同義語ですが、両者の間にわずかな違いがあることがわかりました。
1)Int32
作成中は使用できませんenum
enum Test : Int32
{ XXX = 1 // gives you compilation error
}
enum Test : int
{ XXX = 1 // Works fine
}
2)Int32
システム宣言の下に来る。削除using.System
するとコンパイルエラーが発生しますが、int
int16
、単純に使用するのではなく、メモリリソースを節約するために整数を定義する方がよいint
でしょう。