Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [Java] Cast

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    23

    [Java] Cast

    Mi vergogno un pò a fare questa domanda...:adhone:

    Mi chiedevo come mai facendo un cast per esempio da int a byte per un numero troppo grande (x il campo di esistenza dei byte) ottenga un numero negativo

    Esempio pratico:
    codice:
    int i = 128;
    int h = 130;
    byte b;
    
    b = (byte)i;
    System.out.println(b);  // Ottengo -128
    b = (byte)h;
    System.out.println(b);  // Ottengo -126
    Credo che la spiegazione di tutto stia nel complemento a due...ma non ho ben chiaro il perchè...

    Qualcuno mi illumina pls

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    Perdi la precisione e conseguentemente il valore della variabile...

    Il cast forzato si fa di solito da un tipo più piccolo a uno più grande int -> long

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    23
    ahh sisi certo

    Ma mi chiedevo il perchè si ottenga quel risultato

    ...proprio la logica con cui il compilatore torna fuori -128 anzichè un altro numero

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    cerca il metodo per la sottrazione con bit e capirai :tongue:

  5. #5
    Per come viene é strutturata su un calcolatore la rappresentazione binaria di un numero negativo (di solito si usa il complemento a 1 o a 2), cercare di rappresentare un numero oltre il limite massimo consentito equivale a "ripartire" dall'estremo inferiore della scala dei numeri rappresentabili con i bit a disposizione.

    Mi spiego meglio. Un byte equivale a un campo di 8 bit, il che significa che possiamo rappresentare al massimo 255 numeri. Nella fattispecie si sceglie l'intervallo -128 : +127.

    Se ora hai in una variabile il valore 126 e aggiungi 1 ottieni 127.
    Se a 127 aggiungi di nuovo 1 "torni indietro" e ottieni l'estremo inferiore della scala. Cioe' -128.

    Se a 127 aggiungi 2 otterrai -127 e cosi' via.

    Il trucco sta nel fatto che in base 2, il numero 127 equivale a

    1111 1111

    aggiungendo 1 il riporto viene passato di posizione in posizione fino a che non "esce" dal registro di 8 bit disponibili e ottieni

    0000 0000

    che appunto e' la rappresentazione con la tecnica del complemento di -128.
    S.O. : Ubuntu 5.04
    Lang : J2*E,PHP,tcl/tk

  6. #6
    Il trucco sta nel fatto che in base 2, il numero 127 equivale a

    1111 1111

    aggiungendo 1 il riporto viene passato di posizione in posizione fino a che non "esce" dal registro di 8 bit disponibili e ottieni

    0000 0000

    che appunto e' la rappresentazione con la tecnica del complemento di -128.
    Scherzi?

  7. #7
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    non è proprio così, la tecnica del complemento a 2 la si ottiene vacendo l'or logico di tutti i bit e sommando 1

  8. #8
    la tecnica del complemento a 2 la si ottiene vacendo l'or logico di tutti i bit e sommando 1
    L`or logico? E con cosa?

  9. #9
    Per Rox :

    ok, ho scritto un po' di caxxate! :tongue:

    L'esame di architettura degli elaboratori l'ho dato un po' di tempo fa e non avevo voglia di ripescare gli appunti. Comunque esempio specifico a parte il discorso e' quello : la questione del riporto fa si che si abbia questa "congiunzione" tra il piu' grande numero positivo e il piu' grande negativo nella scala dei numeri rappresentabili con i bit dati.

    Ciau!
    S.O. : Ubuntu 5.04
    Lang : J2*E,PHP,tcl/tk

  10. #10
    e ovviamente mi sottopongo alla pena di 10 frustate per aver scritto 127 come 1111 1111 ...
    S.O. : Ubuntu 5.04
    Lang : J2*E,PHP,tcl/tk

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 © 2024 vBulletin Solutions, Inc. All rights reserved.