salve ragazzi,
sono alle prime armi con java.. ho bisogno di un codice che presi in ingresso due interi lo divida in 2 short (uno che rappresenta il valore decimale dei bit più significativi e uno di quelli meno significativi) ottenendo quindi 4 short (2 per il primo e due per il secondo intero). Successivamente dopo aver effettuato un'operazione sugli short (per esempio una sottrazione del tipo.. risultH (short)= short1H-short2H ; risultL (short) = short1L-short2L. NB dove short1H e short1L sono rispettivamente la parte più significativa e quella meno significativa del primo intero.) vorrei ricostruire un intero nel seguente modo:
risultato (intero)= (risultH+risultL). Soprattutto vorrei che il risultato coincidesse con quello della sottrazione effettuata direttamente sugli interi in input.
Questo è quello che sono riuscito a fare con l'aiuto di alcuni gentilissimi utenti di questo forum.. il problema è che a volte nn tornano i conti
// Divide due int in quattro short (shortH indica la parte alta, bit più significativi;
// shortL è la parte bassa, bit meno significativi). Successivamente fa la sottrazione tra gli short corrispondenti
// (short1H-short2H...) riporta il risultato dell'operazione e ricostruisce un intero con i due short risultanti.
public class Int_to_2short_versione5 {
public static void main(String[] args) {
int a= -222222990;
int b= 999000;
int valore=a-b;
System.out.println("Sottrazione tra interi (int1-int2):"+valore);//controllo
//Converto l'int1 a in due short
short high = (short) (a >> 16);
short low = (short) a;
System.out.println("");
System.out.println("Numero1H short:"+high);
System.out.println("Numero1L short:"+low);
//Converto l'int2 a in due short
short high2 = (short) (b >> 16);
short low2 = (short) b;
System.out.println("");
System.out.println("Numero2H short:"+high2);
System.out.println("Numero2L short:"+low2);
System.out.println("");
// effettuo la sottrazione e ne memorizzo il risultato
// in altri 2 short (sottrazione e sottrazione2)
short sottrazione=(short) (high-high2);
short sottrazione2 = (short) (low-low2);
System.out.println("RisultatoH short (short1H-short2H):"+sottrazione);
System.out.println("RisultatoL short (short1L-short2L):"+sottrazione2);
//Ricostruisco un int con i due short sottrazione e sottrazone2.
int num2 = sottrazione << 16 | sottrazione2 & 0xFFFF;
System.out.println("Risultato (int):"+num2);
if(valore!=num2){
System.out.println("");
System.out.println("Errore!!!");
}
}
}
OUTPUT:
Sottrazione tra interi (int1-int2):-223221990
Numero1H short:-3391
Numero1L short:9586
Numero2H short:15
Numero2L short:15960
RisultatoH short (short1H-short2H):-3406
RisultatoL short (short1L-short2L):-6374
Risultato (int):-223156454
Errore!!!
PS scusate se ho postato 2 volte lo stesso mess.. nn avevo letto il regolamento..sorry![]()

