Как заметил жожоба , long
не гарантированно будет иметь ширину 64 бита (хотя он ошибочно говорит, что это 32 бита - long
имеет ширину 64 бита в Objective-C на 64 платформы). Тем не менее, я бы использовал фактический тип фиксированной ширины вместо long long
.
#include <stdint.h>
uint64_t doubleToBits(double x) {
const union { double f; uint64_t i; } xUnion = { .f = x };
return xUnion.i;
}
uint32_t floatToBits(float x) {
const union { float f; uint32_t i; } xUnion = { .f = x };
return xUnion.i;
}