当大小相同时,浮点型和整数数据类型之间有什么区别?
当大小相同时,浮点数据类型和整数数据类型之间有什么区别?
当大小相同时,浮点数据类型和整数数据类型之间有什么区别?
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 × 109。float
int
但这也意味着,由于 32 位只有 4.2 × 109 种不同的状态(它们都用于表示可以存储的值),因此在 的数值范围的较大端,数字的间距更宽(因为不能有比唯一数字更多的唯一数字)。那么,你不能准确地表示一些数字。例如,数字 2 × 1012 的表示形式为 1,999,999,991,808。这可能接近2,000,000,000,000,但这并不准确。同样,将1添加到该数字中也不会改变它,因为1太小而无法在使用较大比例时产生影响。int
float
float
int
float
float
同样,您也可以在 a 中表示非常小的数字(介于 0 和 1 之间),但无论数字是非常大还是非常小,都只有大约 6 或 7 个十进制数字的精度。如果你有大数字,这些数字在数字的开头(例如4.51534×1035,这只不过是451534后面跟着30个零 - 并且无法判断这30位数字实际上是零还是其他东西),对于非常小的数字(例如3.14159×10-27),它们位于数字的远端, 远远超过0.0000的起始数字...float
float
float
浮点数用于存储比整数可以拟合的更宽的数字范围。其中包括十进制数和科学记数法样式数字,这些数字的值可以大于 32 位的容值。以下是对它们的深入了解:http://en.wikipedia.org/wiki/Floating_point