私はいくつかの Java コードを Objective C に移植していますが、頭痛がするほどのビット単位の知識があります。Double.doubleToLongBits および Float.floatToIntBits に相当する objC を教えてもらえますか?
2 に答える
5
ホホバが指摘したように、 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 のビットを a に割り当てる安全な方法はありません。Java では、double
とはどちらも 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 に答える