基本上我现在很困惑,在 stackoverflow 或通过谷歌搜索找不到任何有用的东西。我一直在阅读有关计算机如何以二进制格式存储不同数据类型的内容,以更好地理解 C 编程和计算机科学的常识。我想我理解 float 是如何工作的,但是根据我的理解,小数点前面的第一位(或二进制点idk)不包括在内,因为它应该总是1,因为我们将小数点移到第一位后面从左到右的值为 1。 在这种情况下,由于我们不存储第一位,我们如何区分存储值 1.0 和 0.0 的浮点变量。
诗。如果需要,请随时编辑这篇文章。英语不是我的母语。
最佳答案
... first bit in front of ... binary point ... isn't included because it is supposedly always 1 ...
并非总是。
使用常见的浮点格式,例如 float32 ,当有偏指数为 (0) 时,有效数(错误地称为尾数)的前导为 0
而不是 1
。此时有偏指数encodes也不同。
“零”通常被编码为全零位模式。
v--- Implied bit
0 11111110 (1) 111_1111_1111_1111_1111_1111 Maximum value (~3.4e38)
0 01111111 (1) 000_0000_0000_0000_0000_0000 1.0
0 00000001 (1) 000_0000_0000_0000_0000_0000 smallest non-zero "normal" (~1.18e-38)
0 00000000 (0) 111_1111_1111_1111_1111_1111 largest "sub-normal" (~1.18e-38)
0 00000000 (0) 000_0000_0000_0000_0000_0001 smallest "sub-normal" (~1.40e-45)
0 00000000 (0) 000_0000_0000_0000_0000_0000 zero
-0.0,支持时与 0.0 相同,符号位位置为 1。
关于c - 使用浮点二进制格式的变量如何存储值 0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71863999/