0

IEEE754 浮動小数点数を扱うとき、32 ビット変数の上位 9 ビットをゼロにする 2 つの方法を見つけました。それらのいずれかが他のものよりも優れていますか?

Java 関連の追加: 命令の効率に関する情報を提供するリストはありますか? BIPUSH は一般的に LDC よりも高速であると想定されていますが、それ以外はそれほど高速ではないことがランダムにわかりました。

// 10111111110010100011110101110001 bits
// 00000000010010100011110101110001 significand

int bits = 0b10111111110010100011110101110001;
int significand = bits & 0b11111111111111111111111;
int significand2 = bits << 9 >>> 9;

バイトコード…</p>

L4
    LINENUMBER 49 L4
    ILOAD 0
    LDC 8388607 // = 0b11111111111111111111111
    IAND
    ISTORE 5
L5
    LINENUMBER 50 L5
    ILOAD 0
    BIPUSH 9
    ISHL
    BIPUSH 9
    IUSHR
    ISTORE 6

ありがとう。:)

4

2 に答える 2

3

バイトコードは移植可能な中間言語です。適切なパフォーマンスを得るために、最新の JVM はジャストインタイムでネイティブ コードにコンパイルします。X のパフォーマンスが Y よりも優れている理由について結論を出すには、生成されたネイティブ コードを分析する必要があります。

生成されたアセンブラー コードのプリントアウトを取得する方法は、JVM によって異なります。Hotspot (つまり、Oracle JDK および OpenJDK) の手順については、こちらを参照してください: http://mechanical-sympathy.blogspot.com/2013/06/printing-generated -アセンブリ コード from.html

于 2013-10-04T23:38:52.053 に答える