提问人:Роман 提问时间:11/15/2022 最后编辑:wohlstadРоман 更新时间:11/15/2022 访问量:241
如何在 C 中的uint64_t变量中存储浮点值?
How to store float value in uint64_t variable in C?
问:
我有一个值数组,我需要在其中存储 4 种不同的数据类型: ,, , .我通过简单的强制转换为 来解决每种类型,但它不适用于浮点数:uint64_t
uint64_t *data;
int
char*
bool
float
(uint64_t)
float val = 1.5f;
uint64_t var = (uint64_t) val;
printf("%.1f", (float) var); // prints 1.0
有没有办法在比强制转换更低的级别上在变量之间移动数据?我尝试以各种方式组合演员表,但结果是或.0.0
1.0
答:
2赞
chux - Reinstate Monica
#1
...将值存储在变量中...
float
uint64_t
复制它。
float var_f = 1.5f;
uint64_t var_u64;
_Static_assert(sizeof var_f <= sizeof var_u64, "Wide float");
memcpy(&var_u64, &var_f, sizeof var_f);
恢复
memcpy(&var_f, &var_u64, sizeof var_f);
printf("%g\n", var_f);
评论
3赞
Some programmer dude
11/15/2022
最好知道,在大多数系统(当然是当前所有类似 PC 的系统)上都是单精度 32 位类型。这样使用是可行的,但它会使一半的变量处于不确定状态(确切地说,哪一半取决于系统的字节序)。float
memcpy
uint64_t
上一个:C 中的浮点除法用于大数
评论
uint64_t *var = (uint64_t *) &val;
union
char
memcpy()
(uint64_t) val
float
uint64_t