0

私はいくつかの Java コードを Objective C に移植していますが、頭痛がするほどのビット単位の知識があります。Double.doubleToLongBits および Float.floatToIntBits に相当する objC を教えてもらえますか?

4

2 に答える 2

5

ホホバが指摘したように、 long64 ビット幅であることが保証されていません (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 のビットを a に割り当てる安全な方法はありません。Java では、doubleとはどちらも 64 ビットです。Objective C では、32 ビットと64 ビットの場合があります。longlongdoublelongdouble

long long代わりに使用する必要があります。

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