[quote=引用 11 楼 qq120848369 的回复:] [quote=引用 9 楼 Tkaoru 的回复:] [quote=引用 6 楼 qq120848369 的回复:] 用C++来写可以简单的多啊: reinterpret_cast<unsigned long long>(x) >> 52
[quote=引用 9 楼 Tkaoru 的回复:] [quote=引用 6 楼 qq120848369 的回复:] 用C++来写可以简单的多啊: reinterpret_cast<unsigned long long>(x) >> 52
&(x)去x的地址,(unsigned long long*)&(x)把x的地址类型转为unsigned long long*。 *((unsigned long long*)&(x))转化之后取x的值 x之前是double,转化为unsigned long long之后,取到的x的值可能跟之前的x的值不一样了。 *((unsigned long long*)&(x))>>52 把取到的unsigned long long 类型的值,也就是x右移52位
[quote=引用 6 楼 qq120848369 的回复:] 用C++来写可以简单的多啊: reinterpret_cast<unsigned long long>(x) >> 52
[quote=引用 5 楼 relaxisland 的回复:] 上面基本都说了,补充一下 就是把 double的 位数部分(52字节)移除掉, 得到 符号位 + 指数位 目的是啥就不知道了,为了研究double的构造?
用C++来写可以简单的多啊: reinterpret_cast<unsigned long long>(x) >> 52
上面基本都说了,补充一下 就是把 double的 位数部分(52字节)移除掉, 得到 符号位 + 指数位 目的是啥就不知道了,为了研究double的构造?
如题,这句代码不懂,其中x是一个double类型的数,只知道这句话是想将x按位右移52位。求详解,包括long*是干嘛的,&和外面的*是干嘛的,还有为什么不能直接写x>>52,会报错
应该是内存映射机制吧! http://www.360doc.com/content/11/1019/08/1317564_157333511.shtml
64,685
社区成员
250,491
社区内容
加载中
试试用AI创作助手写篇文章吧