0

我正在将一些 Java 代码移植到 Objective C 并且知道足够多的位来让我头疼。有人可以指出我与 Double.doubleToLongBits 和 Float.floatToIntBits 等效的 objC 吗?

4

2 回答 2

5

正如jojoba所指出的,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;
}
于 2010-11-05T19:49:13.897 回答
3

在Objective C中没有将a的位分配给doublea的安全方法。在Java中,它们都是64位。在某些情况下,Objective C是 32 位和64 位。longlongdoublelongdouble

你应该long long改用。

int intValue = *((int*)(&floatValue));
long long llValue = *((long long*)(&doubleValue));
于 2010-11-05T19:32:44.997 回答