Oppure

Loading
06/08/11 12:05
DevelopExpert
Salve, dovrei tradurre la seguente istruzione in codice IJVM:

Z = X % 2

Qualcuno, potrebbe gentilmente scrivermi il codice IJVM per questa istruzione?

Non sò proprio come poter calcolare il resto di una divisione in ijvm, mi hanno suggerito di utilizzare l'IAND ma non riesco proprio a capire cosa c'entri col resto di una divisione...

Grazie ...
aaa
06/08/11 12:11
arack95
Semplice, considera i numeri in binario:
se hai 110(6) e lo dividi per due, diventa 11(3) mentre se hai 111(7) hai 11(3) col resto di 1, quindi in questo caso puoi fare un semplice and tra x e 1 :heehee:

Quindi in questo caso prima pushi x, poi 1 e poi fai iand, spero di esserti stato d'aiuto :)
aaa
06/08/11 13:06
DevelopExpert
arack95 grazie mille. Finalmente sono risuscito a capire ! :)

Approfittando della tua gentilezza ti chiedo gentilmente di controllare se ho svolto il seguente esercizio in maniera corretta. Grazie ancora.


Tradurre la seguente funzione in un Metodo IJVM:

int f (int x) {

if ( x > 1000 ) return x;

int z = x % 2;

return 1 + f ( x * 2 ) + f ( z + x * 2);
}



[u]Svolgimento:[/u]

.CONSTANT 
   VAL 1000
.END-CONSTANT


.METHOD F ( X )
     .VAR
         Z
     .END-VAR

LDCW   VAL
ILOAD   X
ISUB
IFLT      L1       // if ( 1000 < x )
ILOAD   X        // z = x % 2
BIPUSH  1
IAND
ISTORE  Z
ILOAD    X      // f ( x * 2 )
DUP
IADD
INVOKEVIRTUAL  F
ILOAD    X                  // f ( z + x * 2)
DUP
IADD 
ILOAD    Z
IADD
INVOKEVIRTUAL  F
IADD                       
BIPUSH  1
IADD
IRETURN
L1: ILOAD  X
      IRETURN
.END-METHOD


aaa
06/08/11 19:55
Pitagora
Non sono esperto in matiera, ma studiando sulla pag. di Wikipedia relativa alla IJVM, il tuo programma sembra corretto!
aaa
07/08/11 12:13
DevelopExpert
Grazie Pitagora :)
aaa