读书人

*((unsigned long long*)amp;(x))gt;gt;52 求

发布时间: 2013-08-10 21:14:06 作者: rapoo

*((unsigned long long*)&(x))>>52 求解释这句话的意思
如题,这句代码不懂,其中x是一个double类型的数,只知道这句话是想将x按位右移52位。求详解,包括long*是干嘛的,&和外面的*是干嘛的,还有为什么不能直接写x>>52,会报错
[解决办法]

引用:
如题,这句代码不懂,其中x是一个double类型的数,只知道这句话是想将x按位右移52位。求详解,包括long*是干嘛的,&和外面的*是干嘛的,还有为什么不能直接写x>>52,会报错

移位操作局限于整数,直接移位当然有问题。转化为unsigned long long类型是因为double表示的范围大。这样的移位舍弃了小数部分的
[解决办法]
&(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: 引用:

用C++来写可以简单的多啊:

reinterpret_cast<unsigned long long>(x) >> 52

这句会报错 “reinterpret_cast”无法从“double”转化为“unsigned_int 64”


少写了个符号:
reinterpret_cast<unsigned long long &>(x) >> 52

读书人网 >C++

热点推荐