我正在将一些 Java 代码移植到 Objective C 并且知道足够多的位来让我头疼。有人可以指出我与 Double.doubleToLongBits 和 Float.floatToIntBits 等效的 objC 吗?
问问题
749 次
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的位分配给double
a的安全方法。在Java中,它们都是64位。在某些情况下,Objective C是 32 位和64 位。long
long
double
long
double
你应该long long
改用。
int intValue = *((int*)(&floatValue));
long long llValue = *((long long*)(&doubleValue));
于 2010-11-05T19:32:44.997 回答