基本上,我现在很困惑,在stackoverflow或谷歌搜索中找不到任何有用的东西。我一直在阅读计算机如何以二进制格式存储不同的数据类型,以更好地理解C编程和计算机科学的一般知识。我想我明白浮点数是如何工作的,但根据我的理解,小数点前的第一位(或二进制点idk)不包括在内,因为它应该总是1,因为我们将小数点后方的第一位从左到右移动值为1。在这种情况下,既然我们不存储第一位,我们如何能够区分存储值1.0和0.0的浮点变量。
附言:如果需要,请随时编辑这篇文章。英语不是我的第一语言。
…前面的第一位…二进制点…不包括在内,因为它应该总是1…
不总是。
对于常见的浮点格式,如float32,当有偏指数为a(0)时,有效数(错误地称为尾数)具有前导0
而不是1
。此时,有偏指数的编码方式也不同。
“零”通常被编码为全零位模式。
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,当支持时,与符号位处带有1的0.0相同。