当大小相同时,浮点型和整数数据类型之间有什么区别?

2022-08-31 19:46:40

当大小相同时,浮点数据类型和整数数据类型之间有什么区别?


答案 1
  • float存储浮点值,即具有潜在小数位的值
  • int仅存储整数值,即整数

因此,虽然两者都是32位宽,但它们的使用(和表示)是完全不同的。不能将 3.141 存储在整数中,但可以存储在 .float

进一步剖析它们:

在整数中,所有位都用于存储数字值。这是(在Java和许多计算机中)在所谓的二进制补体中完成的。这基本上意味着您可以表示 −231 到 231 − 1 的值。

在浮点数中,这 32 位分为三个不同的部分:符号位、指数和尾数。它们布局如下:

S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM

有一个位确定数字是负数还是非负数(零既不是正数也不是负数,但符号位设置为零)。然后有 8 位指数和 23 位尾数。为了从中获得一个有用的数字,(粗略地)执行以下计算:

M × 2E

(还有更多内容,但对于本次讨论的目的来说,这应该足够了)

尾数本质上只不过是一个 24 位整数。这乘以2到指数部分的幂,大致上是一个介于−128和127之间的数字。

因此,您可以准确地表示适合 24 位整数的所有数字,但数值范围也要大得多,因为指数越大,值越大。例如,a 的最大值约为 3.4 × 1038,而只允许值最大为 2.1 × 109floatint

但这也意味着,由于 32 位只有 4.2 × 109 种不同的状态(它们都用于表示可以存储的值),因此在 的数值范围的较大端,数字的间距更宽(因为不能有比唯一数字更多的唯一数字)。那么,你不能准确地表示一些数字。例如,数字 2 × 1012 的表示形式为 1,999,999,991,808。这可能接近2,000,000,000,000,但这并不准确。同样,将1添加到该数字中也不会改变它,因为1太小而无法在使用较大比例时产生影响。intfloatfloatintfloatfloat

同样,您也可以在 a 中表示非常小的数字(介于 0 和 1 之间),但无论数字是非常大还是非常小,都只有大约 6 或 7 个十进制数字的精度。如果你有大数字,这些数字在数字的开头(例如4.51534×1035,这只不过是451534后面跟着30个零 - 并且无法判断这30位数字实际上是零还是其他东西),对于非常小的数字(例如3.14159×10-27),它们位于数字的远端, 远远超过0.0000的起始数字...floatfloatfloat


答案 2

浮点数用于存储比整数可以拟合的更宽的数字范围。其中包括十进制数和科学记数法样式数字,这些数字的值可以大于 32 位的容值。以下是对它们的深入了解:http://en.wikipedia.org/wiki/Floating_point