Wandle einen
Beispiel: float a = -3.7f; 0: ldc #2; //float -3.7f 3: fstore_1 double b = a; 4: fload_1 5: f2d 6: dstore_2 Binäre Darstellung: -3.7f = (110000000 11011001100110011001101)b -3.700000047683716d = (110000000000 11011001100110011001101 00000000000000000000000000000)b Die Variable
Wandle einen
Beispiel 1: float a = -3.7f; 0: ldc #2; //float -3.7f 3: fstore_1 int b = (int)a; 4: fload_1 5: f2i 6: istore_2 Binäre Darstellung: -3.7f = (11000000 01101100 11001100 11001101)b -3i = (11111111 11111111 11111111 11111101)b Die Variable Beispiel 2: Das folgende Beispielprogramm zeigt die Abbildung der Konstanten
public class Test { public static void main(String[] args) { float a = Float.NaN; float b = Float.POSITIVE_INFINITY; float c = Float.NEGATIVE_INFINITY; int ai = (int)a; int bi = (int)b; int ci = (int)c; System.out.println("ai = " + ai); System.out.println("bi = " + bi); System.out.println("ci = " + ci); } } Konsolenausgabe: ai = 0 bi = 2147483647 ci = -2147483648 Die Ausgaben für
Wandle einen
Beispiel: float a = -3.7f; 0: ldc #2; //float -3.7f 3: fstore_1 long b = (long)a; 4: fload_1 5: f2l 6: lstore_2 Binäre Darstellung: -3.7f = (11000000 01101100 11001100 11001101)b -3L = (11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111101)b Die Variable
Addiere zwei
Die beiden obersten Elemente werden vom Stapel genommen und addiert: result = value1' + value2'. Die Werte value1' und value2' werden aus value1 und value2 durch eine Value Set Conversion ermittelt. Beispiel: float a = 1.0f; 0: fconst_1
1: fstore_1
float b = 2.0f; 2: fconst_2
3: fstore_2
float c = a + b; 4: fload_1
5: fload_2
6: fadd
7: fstore_3
Lade einen
Mit Hilfe von arrayref und index
wird ein Beispiel: float[] f = {4.0f, 5.0f}; 0: iconst_2
1: newarray float
3: dup
4: iconst_0
5: ldc #2; //float 4.0f
7: fastore
8: dup
9: iconst_1
10: ldc #3; //float 5.0f
12: fastore
13: astore_1
float f0 = f[0]; 14: aload_1
15: iconst_0
16: faload
17: fstore_2 Mit
Speichere einen
Auf dem Operandenstapel befinden sich, vor der Ausführung des Befehls, die
Referenz auf das Array, der Index des Elements im Array und der zu speichernde
Vergleiche zwei
Die Werte value1' und value2'
werden aus value1 und value2 durch eine
Value Set Conversion ermittelt. Falls ein Vergleichswert (oder
beide) die Konstante Beispiel: float a = 2.3f; 0: ldc #2; //float 2.3f
2: fstore_1
float b = 3.4f; 3: ldc #3; //float 3.4f
5: fstore_2
boolean c = a < b; 6: fload_1
7: fload_2
8: fcmpg
9: ifge 16
12: iconst_1
13: goto 17
16: iconst_0
17: istore_3 Nachdem die Vergleichsanweisung
Vergleiche zwei
Die Werte value1' und value2'
werden aus value1 und value2 durch eine
Value Set Conversion ermittelt. Falls ein Vergleichswert (oder
beide) die Konstante Beispiel: float a = 3.4f; 0: ldc #2; //float 3.4f
2: fstore_1
float b = 2.3f; 3: ldc #3; //float 2.3f
5: fstore_2
boolean c = a > b; 6: fload_1
7: fload_2
8: fcmpl
9: ifle 16
12: iconst_1
13: goto 17
16: iconst_0
17: istore_3 Nachdem die Vergleichsanweisung
Lege die Beispiel: float f = 0.0f; 0: fconst_0
1: fstore_1
Lege die Beispiel: Siehe dazu
Lege die Beispiel: Siehe dazu
Dividiere zwei
Die beiden obersten Elemente werden vom Stapel genommen und die folgende Division wird durchgeführt: result = value1' / value2'. Die Werte value1' und value2' werden aus value1 und value2 durch eine Value Set Conversion ermittelt. Beispiel: float a = 1.0f; 0: fconst_1
1: fstore_1
float b = 2.0f; 2: fconst_2
3: fstore_2
float c = a / b; 4: fload_1
5: fload_2
6: fdiv
7: fstore_3
Lade einen
Der Eintrag value im Array bei diesem Index muss vom
Typ Beispiel: public class Test {
public static void main(String[] args) {
float f1 = args.length; 0: aload_0
1: arraylength
2: i2f
3: fstore_1
float f2 = 0.0f; 4: fconst_0
5: fstore_2
float f3 = 1.0f; 6: fconst_1
7: fstore_3
float f4 = 2.0f; 8: fconst_2
9: fstore 4
float f5 = f1 + f2 + f3 + f4; 11: fload_1
12: fload_2
13: fadd
14: fload_3
15: fadd
16: fload 4
18: fadd
19: fstore 5
}
} Das Laden der Zahlenwerte aus dem Array der lokalen Variablen übernehmen
zunächst die mit einem Byte codierten JVM-Befehle
Lade den
Der Eintrag im Array bei Index 0 muss vom Typ
Lade den
Der Eintrag im Array bei Index 1 muss vom Typ
Lade den
Der Eintrag im Array bei Index 2 muss vom Typ
Lade den
Der Eintrag im Array bei Index 3 muss vom Typ
Multipliziere zwei
Die beiden obersten Elemente werden vom Stapel genommen und miteinander multipliziert: result = value1' * value2'. Die Werte value1' und value2' werden aus value1 und value2 durch eine Value Set Conversion ermittelt. Beispiel: float a = 1.0f; 0: fconst_1
1: fstore_1
float b = 2.0f; 2: fconst_2
3: fstore_2
float c = a * b; 4: fload_1
5: fload_2
6: fmul
7: fstore_3
Negiere einen
Es gilt: result = -value'. Die
Berechnung gilt, falls value' nicht Beispiel 1: float a = 2.0f; 0: fconst_2
1: fstore_1
float b = -a; 2: fload_1
3: fneg
4: fstore_2 Beispiel 2: public class Test { public static void main(String[] args) { float a = 3.0f; float a2 = -a; float a3 = 0.0f - a; float b = 0.0f; float b2 = -b; float b3 = 0.0f - b; float c = -Float.NaN; float d = -Float.NEGATIVE_INFINITY; System.out.println("a=" + a + ", a2=" + a2 + ", a3=" + a3); System.out.println("b=" + b + ", b2=" + b2 + ", b3=" + b3); System.out.println("c=" + c); System.out.println("d=" + d); } } Konsolenausgabe: a=3.0, a2=-3.0, a3=-3.0 b=0.0, b2=-0.0, b3=0.0 c=NaN d=Infinity
Berechne den
Die beiden obersten Elemente werden vom Stapel genommen und die folgende
Berechnung wird durchgeführt: result = value1' -
(value2' * q). Die Berechnung gilt,
falls value1' und value2' nicht
Beispiel 1: 10.7 % 4.1 = 2.5 float a = 10.7f; 0: ldc #2; //float 10.7f
2: fstore_1
float b = 4.1f; 3: ldc #3; //float 4.1f
5: fstore_2
float c = a % b; 6: fload_1
7: fload_2
8: frem
9: fstore_3 Der Inhalt der Variablen Beispiel 2: public class Test { public static void main(String[] args) { float value1 = 10.7f; float value2 = 4.1f; float result = value1 % value2; float qf = value1 / value2; int q = (int)qf; float result2 = value1 - (value2 * q); System.out.println("result = " + result); System.out.println("qf=" + qf + ", q=" + q + ", result2=" + result2); } } Konsolenausgabe: result=2.5 qf=2.609756, q=2, result2=2.5 Beispiel 3: public class Test { public static void main(String[] args) { float r1 = Float.NaN % 0.0f; float r2 = Float.NEGATIVE_INFINITY % 0.0f; float r3 = 0.0f % Float.POSITIVE_INFINITY; float r4 = 3.0f % Float.POSITIVE_INFINITY; float r5 = 0.0f % 0.0f; System.out.println("r1=" + r1); System.out.println("r2=" + r2); System.out.println("r3=" + r3); System.out.println("r4=" + r4); System.out.println("r5=" + r5); } } Konsolenausgabe: r1=NaN r2=NaN r3=0.0 r4=3.0 r5=NaN
Gebe einen
Der Rückgabewert value wird vom Stapel genommen und an den Aufrufer der Methode zurückgegeben, indem dieser auf den Operandenstapel des Methodenaufrufers gelegt wird. Beispiel: public class Test {
public static float method1() { public static float method1();
Code:
float a = 3.0f; 0: ldc #2; //float 3.0f
2: fstore_0
return a; 3: fload_0
} 4: freturn
public static void main(String[] args) {
float b = method1();
}
}
Speichere einen
Die
Speichere einen
Die
Speichere einen
Die
Speichere einen
Die
Speichere einen
Die
Subtrahiere zwei
Die beiden obersten Elemente werden vom Stapel genommen und subtrahiert: result = value1' - value2'. Die Werte value1' und value2' werden aus value1 und value2 durch eine Value Set Conversion ermittelt. Beispiel: float a = 2.0f; 0: fconst_2
1: fstore_1
float b = 1.0f; 2: fconst_1
3: fstore_2
float c = a - b; 4: fload_1
5: fload_2
6: fsub
7: fstore_3 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||