c - 将floats打包成long long

标签 c bit-manipulation

我想将 2 个 float 打包成一个 long long。执行此操作的正确方法是什么?

最佳答案

从两个方面来说,这在一定程度上取决于您希望它的便携性如何:它可以在哪些平台上运行,以及它在哪些平台上给出相同的答案。但是像这样的事情。

#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;
}

在一次写+读中将 float 的位作为整数的“其他”方法是使用所谓的“union 转换”,但我更喜欢 memcpy。您还可以一次访问一个 float unsigned char 并构建具有 8 位移位的 long long

关于c - 将floats打包成long long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4650489/

相关文章:

c - C 中仅使用位运算符的符号函数

c - 重写没有分支的代码

c++ - 将 uint64_t 截断为 uint8_t[i] 时是否应该使用位掩码?

c - 如何在 Visual Studio Code 中运行 C 程序?

c - 如何在内存中连续分配 char 数组的二维数组并在单次调用中写入文件

c - 如何使用编译器tcc在window中添加gsl库?

Java : Operators and Typecasting

c - 如何在转置数据数组上使用 fftw_plan_many_dft?

c - 为什么此代码的输出是 "BYE".. 而不是 "HI"

c - 在位数组中有效地查找 '1' 的位置