如果Long Integer和float都需要4个字节存储在内存中,为什么它们的范围不同?
答案 0 :(得分:12)
整数存储如下:
浮动的存储方式不同,以牺牲准确性为代价提供更大的范围:
Float以指数形式表示:(+/-)S *(base)^ E
BTW,“long”并不总是32位。请参阅this article。
答案 1 :(得分:2)
对数字进行编码的不同方式。
长计数从1到2 ^(4 * 8)。
Float仅使用32位中的23位进行“计数”。但它在其他位中添加了“范围”和指数。所以你有更大的数字,但它们不太准确(在较低的部分):
1.2424 * 10 ^ 54(mantisse * exponent)肯定大于2 ^ 32。但是你可以从一个长的2 ^ 31-1中辨别出一个长2 ^ 31而你无法辨别浮动1.24 * 10 ^ 54和一个浮点数1.24 * 10 ^ 54 - 1:1只是在这个表示中丢失了浮。
答案 2 :(得分:1)
它们的大小并不总是一样。但即使它们存在,它们的范围也不同,因为它们用于不同的目的。一个用于没有小数位的整数,一个用于小数。
答案 3 :(得分:0)
这可以用浮点表示可以表示比固定点表示更大范围的数字的原因来解释。来自Wikipedia entry:
的文字浮点的优点 在定点上的表示(和 整数)表示就是它可以 支持更广泛的价值观。 例如,一个定点 表示有七位小数 数字,假设小数点 在第五个之后定位 数字,可以代表数字 12345.67,8765.43,123.00等等,而浮点数 表示(例如IEEE 754 decimal32格式),带七位小数 数字可以另外代表 1.234567,123456.7,0.00001234567,1234567000000000,等等。该 浮点格式需要稍微 更多存储(编码位置 小数点),所以存储时 相同的空间,浮点数 实现他们更大的范围 牺牲精度。
答案 4 :(得分:0)
确实一个浮点数需要4个字节(32位),但由于它是一个浮点数,你必须在这32位中存储不同的东西:
你可以看到float的范围直接取决于分配给有效数字的位数,而min / max值取决于为指数分配的numbre位数。
上面的例子:
关于一个长整数,你有1位用于符号,然后31位代表整数值,最大值为2 147 483 647。
您可以查看维基百科以获取更准确的信息: Wikipedia - Floating point
答案 5 :(得分:0)
他们的范围不同,因为他们使用不同的方式来表示数字。
long
(在c中)相当于long int
。这种类型的大小因处理器和编译器而异,但通常就像32位一样。在32位时,它可以表示2 32 个不同的值。由于我们经常要使用负数,因此计算机通常使用称为“two's complement”的格式表示整数。这样,我们可以表示从(-2 31 )到最多(2 31 -1)的数字。计算数字0,这将加起来2个 32 数字。
float
(在c中)通常是单个预设IEEE 754格式的数字。在32位时,此数据类型也可以采用2 32 不同的位模式,但它们不用于直接表示整数,如long
中所示。相反,它们代表一个符号,以及标准化十进制数的mantisse和exponent。
答案 6 :(得分:0)
一般情况下:当你有更多的值范围(浮点数最多为10 ^)时,你的精度就会降低。
这就是这里发生的事情。如果你需要整数,32位长会给你更多。
答案 7 :(得分:0)
在handwavey high level中,浮点sacrefices整数精度以扩展其范围。这是通过将基值与缩放因子组合来完成的。对于较大的值,float不能精确地表示所有整数,但对于较小的值,它将表示优于整数精度。
答案 8 :(得分:-1)
不,C中原始数据类型的大小是实现定义。
This wiki条目明确指出:The floating-point format needs slightly more storage (to encode the position of the radix point), so when stored in the same space, floating-point numbers achieve their greater range at the expense of precision.