gpt4 book ai didi

c - 数据类型 : float, 在 C 中的长转换

转载 作者:太空宇宙 更新时间:2023-11-04 05:28:14 24 4
gpt4 key购买 nike

我正在阅读 C primer plus,在第 3 章,数据类型中,作者说:

如果您采用表示 float 256.0 的位模式并将其解释为长整型值,您将得到 113246208。

我不明白转换是如何进行的。有人可以帮我吗?谢谢。

最佳答案

256.0 是 1.0*28,对吗?

现在,看看格式(从@bash.d 窃取):

31                             0
| |
SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM //S - SIGN , E - EXPONENT, M - MANTISSA

数字是正数,所以 0 进入 S

指数 8 进入 EEEEEEEE 但在到达那里之前,您需要根据格式要求向其加 127,所以 135 到那里。

现在,在 1.0 中,只有点右边的内容实际存储在 MMMMMMMMMMMMMMMMMMMMMMMM 中,所以 0 就在那里。 1. 隐含在格式中表示的大多数数字中,实际上并未存储在格式中。

这里的思路是所有非零数的绝对值都可以转化为

1.0...1.111(1) * 10一些整数(所有数字都是二进制的)

或几乎等价

1.0...1.999(9) * 2一些整数(所有数字均为十进制)

这就是我在回答顶部所做的。转换是通过重复将数字除以或乘以 2 来完成的,直到得到十进制范围 [1.0, 2.0)(或二进制 [1.0, 10.0) 中的尾数)。既然非零数中总有这个1,那为什么还要存储呢?因此它不会被存储并为您提供另一个免费的 M 位。

所以你最终得到:

(0 << 31) + ((8 + 127) << 23) + 0 = 1132462080

格式描述here .

关于c - 数据类型 : float, 在 C 中的长转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15934018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com