float 存储浮点值,即具有潜在小数位的值 int 只存储整数值,即整数 因此,虽然两者都是 32 位宽,但它们的用途(和表示)却大不相同。您不能将 3.141 存储在整数中,但可以存储在 float 中。 进一步剖析它们: 在整数中, 所有 位都用于存储数字值。这是(在 Java 和许多计算机中)以所谓 的二进制补码 完成的。这基本上意味着您可以表示 −2 31到 2 31 − 1 的值。 在浮点数中,这 32 位分为三个不同的部分:符号位、指数和尾数。它们的布局如下: S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM 有一个位确定数字是负数还是非负数(零既不是正数也不是负数,但符号位设置为零)。然后有 8 位指数和 23 位尾数。为了从中获得有用的数字,(大致)执行以下计算: 米 × 2欧 (还有更多内容,但这足以满足本次讨论的目的) 尾数本质上不过是一个 24 位整数。这会乘以 2 的指数部分的幂,大致来说,它是一个介于 −128 和 127 之间的数字。 因此,您可以准确地表示适合 24 位整数的所有数字,但数字范围也更大,因为指数越大,值越大。例如,a float 的最大值约为 3.4 × 10 38而 int 只允许最大 2.1 × 10 9的值。 但这也意味着,由于 32 位只有 4.2 × 10 9 个不同的状态(它们都用于表示值 int 可以存储),因此在 float 的较大端s 数值范围 数字之间的间隔更宽(因为唯一的 float 数字不能比唯一的 int 数字多)。那么你不能准确地表示一些数字。例如,数字 2 × 10 12在 float 中表示为 1,999,999,991,808。这可能 接近 2,000,000,000,000,但并不准确。同样,将 1 添加到该数字不会改变它,因为 1 太小而无法在更大的尺度上产生差异 float 正在那里使用。 同样,您也可以在 float 中表示非常小的数字(介于 0 和 1 之间),但无论数字是非常大还是非常小, float 的精度仅为大约6 位或 7 位十进制数字。如果你有大数字,这些数字位于数字的开头(例如 4.51534 × 10 35 ,无非是 451534 后跟 30 个零 - 并且 float 无法说明这 30 个数字是否有用实际上是零或其他东西),对于非常小的数字(例如 3.14159 × 10 −27 ),它们位于数字的远端,远远超出 0.0000 的起始数字… 原文由 Joey 发布,翻译遵循 CC BY-SA 3.0 许可协议
float
存储浮点值,即具有潜在小数位的值int
只存储整数值,即整数因此,虽然两者都是 32 位宽,但它们的用途(和表示)却大不相同。您不能将 3.141 存储在整数中,但可以存储在
float
中。进一步剖析它们:
在整数中, 所有 位都用于存储数字值。这是(在 Java 和许多计算机中)以所谓 的二进制补码 完成的。这基本上意味着您可以表示 −2 31到 2 31 − 1 的值。
在浮点数中,这 32 位分为三个不同的部分:符号位、指数和尾数。它们的布局如下:
有一个位确定数字是负数还是非负数(零既不是正数也不是负数,但符号位设置为零)。然后有 8 位指数和 23 位尾数。为了从中获得有用的数字,(大致)执行以下计算:
(还有更多内容,但这足以满足本次讨论的目的)
尾数本质上不过是一个 24 位整数。这会乘以 2 的指数部分的幂,大致来说,它是一个介于 −128 和 127 之间的数字。
因此,您可以准确地表示适合 24 位整数的所有数字,但数字范围也更大,因为指数越大,值越大。例如,a
float
的最大值约为 3.4 × 10 38而int
只允许最大 2.1 × 10 9的值。但这也意味着,由于 32 位只有 4.2 × 10 9 个不同的状态(它们都用于表示值
int
可以存储),因此在float
的较大端s 数值范围 数字之间的间隔更宽(因为唯一的float
数字不能比唯一的int
数字多)。那么你不能准确地表示一些数字。例如,数字 2 × 10 12在float
中表示为 1,999,999,991,808。这可能 接近 2,000,000,000,000,但并不准确。同样,将 1 添加到该数字不会改变它,因为 1 太小而无法在更大的尺度上产生差异float
正在那里使用。同样,您也可以在
float
中表示非常小的数字(介于 0 和 1 之间),但无论数字是非常大还是非常小,float
的精度仅为大约6 位或 7 位十进制数字。如果你有大数字,这些数字位于数字的开头(例如 4.51534 × 10 35 ,无非是 451534 后跟 30 个零 - 并且float
无法说明这 30 个数字是否有用实际上是零或其他东西),对于非常小的数字(例如 3.14159 × 10 −27 ),它们位于数字的远端,远远超出 0.0000 的起始数字…