包装漂浮很长

Ham*_*aya 2 c bit-manipulation

我想把2个花车装进很长的路上.这样做的正确方法是什么?

Ste*_*sop 5

从两个方面来说,略微取决于你想要它的可移植性:它完全适用于什么平台,以及它给出相同答案的平台.但是这样的事情.

#include <stdint.h>

long long pack(float lo, float hi) {
    assert(sizeof(float) == 4);
    assert(sizeof(long long) == 8);
    assert(CHAR_BIT == 8);

    uint32_t target;
    memcpy(&target, &lo, sizeof(target));
    long long result = target;
    memcpy(&target, &hi, sizeof(target));
    result += ((long long)target) << 32;
    return result;
}
Run Code Online (Sandbox Code Playgroud)

在一次写入+读取中将浮点数作为整数获取的"其他"方法是使用所谓的"联合强制转换",但我更喜欢memcpy.您也可以一次访问一个浮点数unsigned char并建立long long8位移位.