我试图了解施放导致数据损失及其工作原理。因此,对于以下示例,我尝试了解是否存在数据丢失,如果是的,为什么:((i - int(4),f - float(4),d-double(8))

i == (int)(float) i; // sizeof(int)==sizeof(float) <- no loss
i == (int)(double) i; // sizeof(int)!=sizeof(double) <- possible loss
f == (float)(double) f;// sizeof(double)!=sizeof(float) <- possible loss
d == (float) d;// sizeof(double)!=sizeof(float) <- possible loss

仅基于类型尺寸的答案就足够了吗?(+回合)

有帮助吗?

解决方案

假设32位INT和正常4和8个字节IEEE-754浮子/双倍的浮点数为:

i == (int)(float) i;     // possible loss (32 -> 23 -> 32 bits)
i == (int)(double) i;    // no loss (32 -> 52 -> 32 bits)
f == (float)(double) f;  // no loss (23 -> 52 -> 23 bits)
d == (float) d;          // possible loss (52 -> 23 -> 52 bits)

请注意,INT具有32位精确度,Float有23位,Double具有52位。

其他提示

分配给类型的存储变量的内存并不是您考虑丢失数据的唯一事实。通常,在溢出的情况下,回合的方法以及CPU如何处理数字数据是您可能想研究的其他方面。

因为 sizeof 报告记忆中相同的大小并不意味着存在数据丢失。

考虑0.5。

可以将其存储在浮子中,但不能将其存储在整数中。

因此数据丢失。

即我想要0.5个蛋糕。不能将其表示为整数。一无所获或很多蛋糕。百胜

为什么要整数?因为您可能仅需要整数号码,例如 ID_num

为什么要漂浮?因为您可能需要在实数示例上工作 % calculations

为什么要双重?当您拥有无法适应浮点大小的实数时

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top