*((unsigned long 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位
[解决办法]
少写了个符号:
reinterpret_cast<unsigned long long &>(x) >> 52