INT32として大きな価値を渡すことができないのはなぜですか?
-
28-10-2019 - |
質問
94,800,620,800の番号があります
フロートは4バイトのデータタイプです。 INT32は4バイトのデータタイプでもあります。
float f = 94800620800; // ok
Int32 t = 94800620800; // error
この問題を説明してください。 INT32を使用するときにエラーが発生する理由。どちらも4バイトのデータタイプであるため、Float Data-Typeにこの数値を使用できる理由。ありがとう。
解決
割り当てようとしている番号が 可能な限り最大の値 多くのタイプの場合 Int32
, 、たまたま2,147,483,647です。注意するには、aの最大値 Single
は 3.402823 × 1038.
他のヒント
INT32の最大値は2,147,483,647で、94,800,620,800未満です。
フロートは、次の範囲で値を取ることができます:±1.5×10-45〜±3.4×1038
また、これをチェックしてください - 質問 - Javaでサイズが同じである場合、フロートデータ型と整数データ型の違いは何ですか?. 。これはJavaの質問ですが、概念は同じであり、同じサイズであるにもかかわらず、違いの詳細な説明があります。
その数は4バイトintには大きすぎるためです。のようなスカラー値 Int32
最小および最大制限があります(-2です31 および231 -1この場合、それぞれ1)、そしてあなたは単にこの範囲外に値を保存することはできません。
フローティングポイント数は完全に異なって保存されているため、ランタイム中に可能な精度の問題のみが可能な大きな値でコンパイラエラーが発生することはありません。
これらのタイプのため、内部表現。
float
私のようなものを使用します。D ^ nは私が積分部分であり、Dは小数部分であり、nは指数です(もちろん、これはベース2で発生します)。
このようにして、あなたはより大きな数を保存することができます float
, 、しかし、それは、たとえば、正確ではありません Int32
積分数の保存で。変換しようとする場合
float f = 94800620800;
その価値を保存するのに十分な大きさの積分タイプにとって、それは初期94800620800と同じではないかもしれません。
整数のタイプは正確な表現であり、浮動小数点数は重要な数字と指数の組み合わせです。
フローティングポイントウィキページ これがどのように機能するかを説明しています。
多分あなたはエラーメッセージを読むべきですか? ;)
Error Integral constant is too large
32ビットINTの最大谷は2,147,483,647です
一方、フロートは単一の数字ではなくマンティッサと指数を保存するために機能するため、精度を失うことを犠牲にしてはるかに大きな範囲に対処できます
フロートを印刷してみてください 94800620000
それ以外の 94800620800
低いビットが失われると
INT32の最大値は2,147,483,647です。あなたの価値ははるかに高くなっています。
を見てみましょう system.int32.maxvalue
提供された定数式の値は、intデータ型の範囲内ではありません。
INT32の範囲は、-2,147,483,648から2,147,483,647になります。あなたの変数は範囲外です。