强制类型转换的缺省细节和IEEE 754 规范

随便看了一些东西

算是某种意义上真正理解了强制类型转换的安全性和风险性

本文主要讨论的是C语言环境下

https://www.youtube.com/watch?v=p8u_k2LIZyo

主要启发如上

结论是IEEE 754下的小数在某种意义上相当于int的以2为底的对数(在二进制下对float取对数再进行一些简单的四则运算后即可获得二进制底层下的,二者之间向下取整安全转换公式和强制按地址转换公式)

但是以下几个知识点阻止了我们高效操作(位运算)小数

float是无法进行位操作的

float和dw和int一般是位宽相同的(因为现在是2021年)

float转dw并不会得到内存上排列相同的一些比特位,比如3.01转dw得到3(0000000000....0011)

所以我们需要用到不安全的越界指针

1
2
3
float a;
long b;
b=* (long*) &a;

所以笔者终于彻底明白了这个括号双星是什么含义了...

实际上是对地址的转义再解引用

强转地址的解释方式(也就是括号内内容)

然后再解引用地址,如果这时候直接打印b的值,会得到一个很大的数字,原因是IEEE 754的小数规范是科学计数法

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2019-2024 kier Val
  • Visitors: | Views: