smi*_*dha 5 c++ floating-point binary bit-manipulation
给定double x,并假设它在于[0,1].假设例如x = 0.3 In binary,(保持小数点后10位),它表示为
x=0.0100110011...
Run Code Online (Sandbox Code Playgroud)
我想写一些C++代码,它将提取小数点后面显示的10位数字.换句话说,我想提取整数(0100110011)_2.
现在我对比特转换很新,我对这个问题的解决方案如下
int temp= (int) (x*(1<<10))
Run Code Online (Sandbox Code Playgroud)
然后temp在二进制中将有必要的10位数.
这是执行上述过程的安全方法吗?或者有更安全/更正确的方法吗?
注意:我不希望以字符数组的形式提取数字.我特别想要一个整数(或无符号整数).这样做的原因是,在生成八叉树时,空间中的点根据其名为Morton Keys的位置给出散列键.这些键通常存储为整数.在获得所有点的积分键之后,它们将被分类.从理论上讲,这些密钥可以通过将坐标缩放到[0,1],提取比特并交织它们来获得.
用于memcpy将 double 复制到 32 位数字数组中,如下所示:
unsigned int b[2]; // assume int is 32-bits
memcpy(b, &x, 8);
Run Code Online (Sandbox Code Playgroud)
最高 10 个有效二进制数字位于b[0]或中b[1],具体取决于您的计算机是大端还是小端。
编辑:同样可以通过一些转换而不是 memcpy 来实现,但这会违反严格的别名规则。另一种方法是使用union.