Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Conversione di un int in 2 short

    Salve a tutti! sono nuovo del forum e purtroppo per me anche di.. java!!
    Ho bisogno di un codice che preso un intero (32bit) mi dia in uscita due short che rappresentino rispettivamente il valore decimale dei primi e dei secondi 16 bit.
    Ho provato a scrivere qualcosa con l'aiuto di codici trovati qui.. il problema è che quello che ho ottenuto sono 2 double che rappresentano il valore decimale degli short voluti.. ma sono cmq double!

    Posto di seguito quello che ho fatto..(opera su due int restituendo 4 valori).. vi ringrazio in anticipo.. Help me!

    //Prende in ingresso due numeri interi, li converte in binario, divide i 32 bit dell'int in 2 gruppi da 16 bit (Short)
    //e riporta il valore decimale di ciascuno dei 2 Short.
    public class conversione_Int_Short_2numeri {
    public static void main(String[] args) {
    int i =0; //primo intero da convertire
    int e =1; //secondo intero da convertire
    int[] decimale1 = new int[32];
    int[] decimale2 = new int[32];
    for(int k=0; k< 32; k++){
    decimale1[31-k]=i%2;
    i=i/2;
    }
    for(int k=0; k< 32; k++){
    decimale2[31-k]=e%2;
    e=e/2;
    }
    System.out.println("Primo Short1 in binario:");//primi sedici bit del primo int
    for(int k=0; k<16; k++){
    System.out.println(decimale1[k]);
    }
    System.out.println("Secondo Short1 in binario:");//secondi 16 bit del primo int
    for(int k=16; k<32; k++){
    System.out.println(decimale1[k]);
    }
    System.out.println("Primo Short2 in binario:");//primi sedici bit del secondo int
    for(int k=0; k<16; k++){
    System.out.println(decimale2[k]);
    }
    System.out.println("Secondo Short2 in binario:");//secondi 16 bit del secondo int
    for(int k=16; k<32; k++){
    System.out.println(decimale2[k]);
    }
    //Mi definisco due variabili che rappresentano i due numeri e un contatore
    double num1 = 0;
    double num2 = 0;
    double cont = 0;
    //Ciclo sui primi 16 bit (Short1) e applico l'algoritmo
    for(int k=15; k>=0; k--){
    num1 = num1 + (decimale1[k]*Math.pow(2, cont));
    cont++;
    }
    //Azzero il contatore, ciclo sui secondi 16 bit (Short1) e applico l'algoritmo
    cont = 0;
    for(int k=31; k>=16; k--){
    num2 = num2 + (decimale1[k]*Math.pow(2, cont));
    cont++;
    }
    //Mi definisco altre due variabili che rappresentano i due numeri e un contatore
    double num3 = 0;
    double num4 = 0;
    double cont2 = 0;
    //Ciclo sui primi 16 bit (Short2) e applico l'algoritmo
    for(int k=15; k>=0; k--){
    num3 = num3 + (decimale2[k]*Math.pow(2, cont2));
    cont2++;
    }
    //Azzero il contatore, ciclo sui secondi 16 bit (Short2) e applico l'algoritmo
    cont2 = 0;
    for(int k=31; k>=16; k--){
    num4 = num4 + (decimale2[k]*Math.pow(2, cont2));
    cont2++;
    }

    System.out.println("Valore decimale primo Short: "+num1);
    System.out.println("Valore decimale secondo Short: "+num2);
    System.out.println("Valore decimale primo Short: "+num3);
    System.out.println("Valore decimale secondo Short: "+num4);
    }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Conversione di un int in 2 short

    Originariamente inviato da Leon@@rdo
    Ho bisogno di un codice che preso un intero (32bit) mi dia in uscita due short che rappresentino rispettivamente il valore decimale dei primi e dei secondi 16 bit.
    short high = (short) (tuoInt >> 16);
    short low = (short) tuoInt;
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    grazie per la risp e soprattutto per la celerità..
    in questo modo però ho una perdita di informazione nella convaersione.. vero!?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Leon@@rdo
    grazie per la risp e soprattutto per la celerità..
    in questo modo però ho una perdita di informazione nella convaersione.. vero!?
    Se l'int contiene 0x12345678, nei due short avrai high=0x1234 e low=0x5678. Non è quello che volevi?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    non proprio.. io volevo convertire l'intero in binario (ottenendo 32 bit) successivamente dividerli in 2 gruppi di 16 bit e riportare questi due gruppi di 16 bit in due decimali (Short). Non so se è chiaro.. se fai girare il codice che ho scritto forse capisci meglio.. grazie ancora

  6. #6
    Primo Short1 in binario:
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    Secondo Short1 in binario:
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    Primo Short2 in binario:
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    Secondo Short2 in binario:
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    Valore decimale primo Short: 0.0
    Valore decimale secondo Short: 0.0
    Valore decimale primo Short: 0.0
    Valore decimale secondo Short: 1.0

    questo è quello che ottengo dando come ingressi 1 e 0 ( per semplificare le cose). io vorrei che le uscite "Valore decimale primo Short:0.0;Valore decimale secondo Short: 0.0 ecc ecc" fossero degli short e non dei double

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Leon@@rdo
    non proprio.. io volevo convertire l'intero in binario (ottenendo 32 bit) successivamente dividerli in 2 gruppi di 16 bit e riportare questi due gruppi di 16 bit in due decimali (Short). Non so se è chiaro.. se fai girare il codice che ho scritto forse capisci meglio.. grazie ancora
    Ma tu quindi volevi "passare" attraverso un array di 32 int che contengono 0 o 1. Cos'è ... un giochettino o il solito esercizietto assegnato da un prof. con poca fantasia???

    Comunque non ti servono Math.pow, moltiplicazioni ecc.... Bastano shift e operatori "bitwise" (sui bit).

    Esempio (da 32 int 0/1 a int):
    codice:
        int[] bits = { 1, 1, 0, 0, ....... 0 };
        int n = bitsToInt(bits);
        ....
    
        public static int bitsToInt(int[] bits) {
            int res = 0;
            for (int i = 0; i < 32; i++) {
                res = (res << 1) | bits[i];
            }
            return res;
        }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    devo programmare una javacard che accetta come input solo interi di tipo short (16 bit), però i dati che io devo inserire nella card sono int (32 bit). Ho pensato che l'unico modo per nn perdere informazione era passare attraverso la rappresentazione binaria (nel modo che ho descritto prima). Purtroppo tra pensarlo e metterlo in pratica c'è tutto un manuale di java in mezzo..
    grazie cmq per l'aiuto!!

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Leon@@rdo
    devo programmare una javacard che accetta come input solo interi di tipo short (16 bit), però i dati che io devo inserire nella card sono int (32 bit).
    Non conosco le javacard nei dettagli ... comunque dovresti spiegare meglio cosa vuoi fare.

    Originariamente inviato da Leon@@rdo
    Ho pensato che l'unico modo per nn perdere informazione era passare attraverso la rappresentazione binaria
    Sicuramente non con un array di valori 0/1 che rappresentano i singoli bit!! ... non vedo cosa possa centrare e quale utilità possa avere.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    ci provo..
    ho un intero x esempio 1003500.. in binario è "00000000000011110100111111101100" (32bit) poichè è un int. io vorrei trasformare questo int in due short:

    short1(primi 16 bit)= (0000000000001111) valore decimale 15

    short2(secondi 16 bit)= (0100111111101100)valore decimale 20460

    in uscita vorrei due variabili di tipo short con memorizzati i valori decimali di short1 e short2

    uscita:

    variabile1 (short)= 15 (rappresenta la prima parte dell'intero)

    variabile2 (short)= 20460 (rappresenta la seconda parte dell'intero)

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.