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

发布于 2021-08-14  46 次阅读


随便看了一些东西

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

本文主要讨论的是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)

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

float a;
long b;
b=*  (long*) &a;

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

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

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

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