Visualizzazione dei risultati da 1 a 2 su 2

Discussione: help me.. please!

  1. #1

    help me.. please!

    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!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Rileggi il regolamento su come scegliere i titoli per le discussioni e come postare il codice.
    Riapri una nuova discussione, seguendo quanto indicato nel Regolamento.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.