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