int16、int32、int64 への変換 - どれを選択すればよいかをどのように判断すればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/270263

  •  06-07-2019
  •  | 
  •  

質問

取得した値 (通常は文字列) を変換してから、それを int に変換する必要があることがよくあります。しかし、C# (.Net) では、int16、int32、または int64 のいずれかを選択する必要があります。取得した数値がどのくらいの大きさになるかわからない場合、どのようにしてどれを選択すればよいでしょうか?

役に立ちましたか?

解決

ここでInt16がRAMを節約すると宣言した人は全員、下票を得るべきだと言っています。

質問に対する答えは、キーワード" int"を使用することです(または、気になる場合は、" Int32"を使用してください)。

最大24億個の範囲の数値が得られます...また、32ビットプロセッサはこれらのintをより適切に処理します...(および(最も重要な理由)は、ほとんどすべての理由でそのintを使用しています...おそらく「int」である必要があります; (Int32)。

.Netフレームワークでは、99.999%の数値フィールド(整数)は「int」です; (Int32)。

例:Array.Length、Process.ID、Windows.Width、Button.Heightなどなど100万回。

編集:私の不機嫌さは私を落とすことに気づきます...しかしこれは正しい答えです。

他のヒント

それを追加したかったのです。.NET1.1の時代には、 'int'操作が実際にバイトまたは短い操作よりも高速になるようにコンパイラが最適化されたことを思い出しました。

それは今日も続いていると思いますが、現在いくつかのテストを実行しています。


編集:驚きの発見がありました。short(s)の加算、減算、乗算の演算は実際にintを返します!

TryParse() を繰り返し試行しても意味がありません。フィールドはすでに宣言されています。そのフィールドをオブジェクト型にしない限り、考えを変えることはできません。良いアイデアではありません。

フィールドが表すデータはすべて物理的な意味を持ちます。それは年齢、サイズ、数などです。物理量には、その範囲に現実的な制限があります。その範囲を格納できる int 型を選択してください。オーバーフローを修正しようとしないでください。それはバグです。

現在最も人気のある回答とは異なり、短い整数(Int16やSByteなど)は、大きな整数(Int32やInt64など)よりもメモリ内のスペースを消費しないことがよくあります。 sbyte / short / int / longの大きな配列をインスタンス化し、perfmonを使用して管理ヒープサイズを測定することにより、これを簡単に確認できます。多くのCLRフレーバーは、CPU固有の最適化のためにこれらの整数を拡張しますが、オブジェクトなどの一部として格納される場合、必要なだけのメモリを占有します。

したがって、特に整数の大きなリスト(または整数フィールドを含むオブジェクトの大きなリスト)を使用する場合は、サイズを考慮する必要があります。また、CLS準拠(パブリックメンバーの符号なし整数を許可しない)などのことも考慮する必要があります。

文字列を整数に変換するような単純なケースでは、Int32(C#int)が通常最も意味があり、他のプログラマーが期待するものであることに同意します。

数個の数字についてだけ話している場合、最大の数字を選択してもRAMの全体的な使用量に大きな違いはなく、機能します。たくさんの数字について話している場合は、それらにTryParse()を使用し、最小のint型を見つけてRAMを節約する必要があります。

すべてのコンピューターは有限です。ユーザーの要件がどうなるかに基づいて、上限を定義する必要があります。

実際に上限がなく、「無制限」の値を許可したい場合は、.Net Javaランタイムライブラリをプロジェクトに追加してみてください。これにより、java.math.BigIntegerクラスを使用できるようになります。 -サイズ無制限の整数。

注:.Net Javaライブラリには完全なDevStudioが付属していますが、Expressには付属していないと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top