Obj C 等价于 Double.doubleToLongBits

发布于 2024-10-01 01:00:39 字数 119 浏览 3 评论 0原文

我正在将一些 Java 代码移植到 Objective C,并且对位的了解足够令人头疼。有人可以向我指出 Double.doubleToLongBits 和 Float.floatToIntBits 的 objC 等效项吗?

I am porting some Java code to Objective C and know enough bitwise to get a headache. Can someone point me to the objC equivalents to Double.doubleToLongBits and Float.floatToIntBits?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

音栖息无 2024-10-08 01:00:39

正如 jojoba 指出的,long 不保证是 64 位宽(尽管他说它是 32 位是错误的 - long 是 64 位)在 64 位平台上的 Objective-C 中为位宽)。也就是说,我将使用实际的固定宽度类型而不是 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;
}

As jojoba noted, long isn't guaranteed to be 64 bits wide (though he's wrong to say that it's 32 bits -- long is 64 bits wide in Objective-C on 64-bit platforms). That said, I would use an actual fixed width type instead of 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;
}
递刀给你 2024-10-08 01:00:39

在 Objective C 中,没有安全的方法将 double 的位分配给 long 。
在Java中,longdouble都是64位。在某些情况下,对于 Objective C,long 是 32 位,double 是 64 位。

您应该使用 long long 来代替。

int intValue = *((int*)(&floatValue));
long long llValue = *((long long*)(&doubleValue));

There's no safe way to assign the bits of a double to a long in Objective C.
In Java, long and double are both 64bits. In some cases for Objective C, long is 32bit and double is 64bit.

You should use long long instead.

int intValue = *((int*)(&floatValue));
long long llValue = *((long long*)(&doubleValue));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文