Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    6

    Operatore NOT, dove lo metti per commutare la variabile?

    Buongiorno, sto seguendo un manuale di java, sono ancora alle prime armi ma siccome io sono! Tendo a soffermarmi sulle cazzate, sapete com'è mi piacere capire tutto di quello che leggo...
    Da una mezz'ora buona mi sono fermato sull'operatore bitwise NOT, ~ per introdurlo in java, non da informazioni ne su come usarlo ne dove piazzarlo, nel testo intendo (so che cambia gli 1 in 0 e gli 0 in 1) quindi se non disturbo troppo vorrei un paio di esempi pratici
    Scusate ancora il disturbo e buona serata

    P.S. Cercherò di non mettere + cazzate simili se preferite

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da xoth Visualizza il messaggio
    Tendo a soffermarmi sulle cazzate, sapete com'è mi piacere capire tutto di quello che leggo...
    Non sono c...., è giusto e importante soffermarsi bene su quello che si legge. I libri sulla programmazione non sono romanzi che li si legge in es. 2 giorni e via. Bisogna ragionarci di più, non ti preoccupare.

    Quote Originariamente inviata da xoth Visualizza il messaggio
    Da una mezz'ora buona mi sono fermato sull'operatore bitwise NOT, ~ per introdurlo in java, non da informazioni ne su come usarlo ne dove piazzarlo, nel testo intendo (so che cambia gli 1 in 0 e gli 0 in 1) quindi se non disturbo troppo vorrei un paio di esempi pratici
    Innanzitutto attenzione alla differenza (molto grossa) tra un NOT "bitwise" (sui bit) e un NOT "logico" (su espressioni boolean).

    Prova questo:
    codice:
    int i = 21;
    int inot = ~i;
    
    System.out.println(i);
    System.out.printf("%32s%n", Integer.toBinaryString(i));
    
    System.out.println(inot);
    System.out.printf("%32s%n", Integer.toBinaryString(inot));
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    6
    grande! ho capito il mio errore... io le introducevo come variabili di tipo byte non int ma come mai ci vuole 1 minimo di int? immagino con il long quindi

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da xoth Visualizza il messaggio
    grande! ho capito il mio errore... io le introducevo come variabili di tipo byte non int ma come mai ci vuole 1 minimo di int? immagino con il long quindi
    No alt. L'operatore di NOT bitwise ( ~ ) è usabile anche con i tipi inferiori al int (byte, short, char). La questione è che nell'uso degli operatori viene applicata la numeric promotion, sia per gli operatori binari (cioè con 2 operandi), sia unari (con 1 operando, come ~ ).
    Esiste quindi la binary numeric promotion e la unary numeric promotion.

    La binary numeric promotion si basa su 4 punti, che sul Java Language Specification sono detti così:
    • If either operand is of type double, the other is converted to double.
    • Otherwise, if either operand is of type float, the other is converted to float.
    • Otherwise, if either operand is of type long, the other is converted to long.
    • Otherwise, both operands are converted to type int.

    Il minimo a cui vengono portati gli operandi è int! Quindi:

    un byte + un int ---> int
    un int + un long ---> long
    un double + un short ---> double

    Ma attenzione:
    un byte + un byte ---> int (non byte!)
    un byte + un short ---> int (non short!)

    Idem per gli altri operatori binari - * / % ecc...

    La stessa cosa, in modo limitato ad 1 operando, vale per gli operatori unari come ~ .

    byte b = 10;
    byte b2 = ~b;
    // ERRORE, il risultato è un int che NON può andare direttamente in un byte

    Serve un cast:

    byte b2 = (byte) ~b; // OK


    La numeric promotion è importantissima, fissala bene nella mente.
    Ultima modifica di andbin; 11-09-2016 a 11:40
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.