Come configurare smartphone e PC. Portale informativo
  • casa
  • Recensioni
  • Operazioni aritmetiche. Aritmetica senza segno in Java Baeldung

Operazioni aritmetiche. Aritmetica senza segno in Java Baeldung

1. Operazioni aritmetiche di base

La tabella seguente elenca le operazioni aritmetiche di base utilizzate nel linguaggio Java:

Consideriamo alcune regole per lavorare con le operazioni aritmetiche:

  • Le espressioni vengono valutate da sinistra a destra, a meno che non vengano aggiunte parentesi o alcune operazioni abbiano la precedenza.
  • Le operazioni *, / e% hanno la precedenza su + e -.

Esempio 1. Operazioni aritmetiche su valori interi

Ad esempio, in questo codice, le variabili un e B avrà significati diversi:

Classe pubblica BasicIntMath (public static void main (String args) (int a = 4 + 5 - 2 * 3; int b = 4 + (5 - 2) * 3; System.out.println ("a =" + a) ; System.out.println ("b =" + b);))

Risultato dell'esecuzione:

A = 3 b = 13

  • L'operazione di sottrazione unaria cambia il segno del suo unico operando.
  • Un'operazione di addizione unaria restituisce semplicemente il valore del suo operando. In linea di principio non è necessario, ma possibile.

Esempio 2. Operazioni unarie di addizione e sottrazione

public class UnarySignOperation ( public static void main (String args) (doppia a = -6; doppia b = +6; System.out.println (a); System.out.println (b);))
  • Quando viene eseguita un'operazione di divisione su un tipo di dati intero, il risultato non conterrà un componente frazionario.

Esempio 3. Divisione di numeri interi

public class IntDivision (public static void main (String args) (int a = 16/5; System.out.println (a);))

Il risultato dell'esecuzione di questo programma:

  • Gli operandi per le operazioni aritmetiche devono essere di tipo numerico. Le operazioni aritmetiche non possono essere eseguite su tipi di dati booleani, ma possono essere eseguite su tipi di dati char poiché in Java questo tipo è essenzialmente una variazione del tipo int.

Esempio 4. Operazioni aritmetiche su variabili di tipo char

public class BasicCharMath1 (public static void main (String args) (char c = "n"; System.out.println (c); System.out.println (c + 1); System.out.println (c / 5) ;))

Risultato dell'esecuzione:

N 111 22

Esempio 5. Operazioni aritmetiche su variabili di tipo char

public class BasicCharMath2 (public static void main (String args) (char c1 = "1"; char c2 = "\ u0031"; char c3 = 49; System.out.println (c1 + c2 + c3);))

Risultato dell'esecuzione:

    Operatore modulo - indicato con%. Questo operatore restituisce il resto del primo numero diviso il secondo. Quando si divide un numero intero, anche il risultato è un numero intero.

Esempio 6. Divisione modulo

public class DivisionByModule (public static void main (String args) (int a = 6% 5; double b = 6,2% 5,0; System.out.println (a); System.out.println (b);))

Risultato dell'esecuzione:

1 1.2000000000000002

2. Operazioni aritmetiche composte con assegnazione

Java ha operazioni speciali che combinano l'aritmetica con l'assegnazione. Considera la seguente espressione:

A = a + 4;

In Java, questa operazione può essere scritta come segue:

A + = 4;

Le operazioni di assegnazione composita non solo consentono di ridurre la quantità di codice, ma consentono anche di eseguire la conversione automatica, che non viene eseguita dalle operazioni convenzionali.

Esempio 5. Operazioni di assegnazione aritmetica composita

public class CompoundOperations (public static void main (String args) (int a = 1; int b = 2; int c = 3; a + = 3; b * = 2; c + = a * b; System.out.println (a); System.out.println (b); System.out.println (c);))

La maggior parte delle operazioni sui tipi primitivi viene eseguita non utilizzando metodi, ma utilizzando caratteri speciali chiamati segno di operazione.

Operazione di assegnazione

Assegnando ad una variabile il valore di una costante, di un'altra variabile, o di un'espressione (variabili e/o costanti separate da segni di operazione) si chiama operazione di assegnazione ed è indicato dal cartello " = ", ad esempio: x = 3; y = x; z = x; In Java è possibile riutilizzare l'operazione di assegnazione in un'espressione, ad esempio: x1 = x2 = x3 = 0; Questa operazione viene eseguita da destra a sinistra, cioè prima alla variabile x3 viene assegnato il valore 0, poi alla variabile x2 viene assegnato il valore della variabile x3 (0) e infine alla variabile x1 viene assegnato il valore della variabile x2 (0). i segni di operazioni i cui argomenti sono numeri rientrano in due categorie: unario token (unari) per operazioni a argomento singolo e binario(binario) con due argomenti.

operazioni unarie

Le seguenti operazioni unarie sono definite in Java:
  • unario meno "-" - cambia il segno di un numero o di un'espressione al contrario;
  • unario più "+" - non esegue alcuna azione su un numero o un'espressione;
  • complemento bit a bit "~" (solo per numeri interi) - inverte tutti i bit del campo numerico (cambia da 0 a 1 e da 1 a 0);
  • incremento "++" (solo per numeri interi) - aumenta il valore della variabile di 1;
  • decremento "-" (solo per numeri interi) - diminuisce il valore della variabile di 1.
Esempi di operazioni unarie "+" e "-": int i = 3, j, k; j = - io; //j = -3 k = + io; // k = 3 Un esempio di operazione di complemento bit a bit: int a = 15; int b; b = ~ a; // b = -16 I numeri a e b sono int, cioè sono rappresentati internamente come interi con segno binario con una lunghezza di 32 bit, quindi la rappresentazione binaria dei numeri a e b sarà simile a questa: a = 00000000 00000000 00000000 00001111 b = 11111111 11111111 11111111 11110000 Come puoi vedere da questa rappresentazione, tutti zero bit nel numero a sono stati cambiati quelli in b, e quelli in a sono cambiati a zero bit. La rappresentazione decimale di b è –16. I segni delle operazioni di incremento e decremento possono essere posti prima o dopo la variabile. Queste opzioni sono denominate di conseguenza prefisso e suffisso registrando queste operazioni. Il segno dell'operatore nella notazione del prefisso restituisce il valore del suo operando dopo valutare un'espressione Per la notazione postfissa, il segno di operazione primo restituisce il valore del suo operando e solo dopo calcola l'incremento o il decremento, ad esempio: int x = 1, y, z; y = ++ x; z = x++; Alla variabile y verrà assegnato il valore 2, perché prima il valore di x verrà incrementato di 1, quindi il risultato verrà assegnato alla variabile y. Alla variabile z verrà assegnato il valore 1, perché prima verrà assegnato un valore alla variabile z, quindi il valore di x verrà incrementato di 1. In entrambi i casi, il nuovo valore di x sarà 2. Da notare che in Java, a differenza del C, le operazioni di decremento e incremento possono essere applicate anche a variabili reali (di tipo float e double). Segni di operazione binaria si suddividono in operazioni con risultato numerico e operazioni di confronto il cui risultato è un valore booleano.

Operazioni binarie aritmetiche

Java definisce quanto segue operazioni binarie aritmetiche:
  • addizione "+";
  • sottrazione "-";
  • moltiplicazione " * ";
  • divisione "/";
  • calcolando il resto della divisione degli interi "%" (restituisce il resto della divisione del primo numero per il secondo e il risultato avrà lo stesso segno del dividendo), ad esempio, il risultato dell'operazione 5% 3 sarà 2 e il risultato dell'operazione (-7) % (- 4) sarà -3. In Java, l'operazione può essere utilizzata anche per variabili reali (come float o double).
Esempi di operazioni aritmetiche binarie: int x = 7, x1, x2, x3, x4, x5; x1 = x + 10; // x1 = 17 x2 = x - 8; // x2 = -1 x3 = x2 * x; // x3 = -7 x4 = x / 4; // x4 = 1 (quando si dividono interi // la parte frazionaria viene scartata) x5 = x% 4 // x5 = 3 (resto della divisione// 7 per 4)

Operazioni bit a bit

  • Le operazioni bit a bit trattano i valori numerici originali come campi di bit e su di essi effettuano le seguenti operazioni:
  • impostando il bit su io-esima posizione del campo risultato a 1, se entrambi i bit sono in io-esima posizione degli operandi uguale a 1, o 0, altrimenti - AND bit per bit ("&");
  • impostando il bit su io-esima posizione del campo risultato a 1, se almeno un bit in io-esima posizione degli operandi è uguale a 1, oa 0, altrimenti - OR bit a bit ("|");
  • impostando il bit su io-esima posizione del campo risultato a 1, se i bit in io-esima posizione degli operandi non uguale tra loro, o uguale a 0, altrimenti - OR esclusivo bit a bit ("^");
  • spostamento a sinistra dei bit del campo del primo operando per il numero di bit determinato dal secondo operando (il bit di segno del numero non cambia in questo caso) - spostamento bit per bit a sinistra, tenendo conto del segno "<< ";
  • sposta a destra dei bit del campo del primo operando per il numero di bit determinato dal secondo operando (il bit di segno del numero non cambia in questo caso) - sposta a destra per bit, tenendo conto del " >>" segno;
  • spostamento a destra dei bit del campo del primo operando per il numero di bit determinato dal secondo operando (in questo caso viene spostato anche il bit di segno del numero) - spostamento bit per bit a destra senza tenere conto del " >>>" segno.
Esempi di operazioni bit a bit:
  1. AND . bit a bit

    intero x = 112; int y = 94; int z; z = x & y; //z = 80: 00000000 00000000 00000000 01010000
  2. OR bit a bit

    intero x = 112; // x: 00000000 00000000 00000000 01110000 int y = 94; // y: 00000000 00000000 00000000 01011110 int z; z = x | si; //z = 126: 00000000 00000000 00000000 01111110
  3. OR esclusivo bit a bit

    intero x = 112; // x: 00000000 00000000 00000000 01110000 int y = 94; // y: 00000000 00000000 00000000 01011110 int z; z = x ^ y; //z = 46: 00000000 00000000 00000000 00101110
  4. Spostati a sinistra, tenendo conto del segno

    int x = 31, z; // x: 00000000 00000000 00000000 00011111 z = x<< 2 ; //z = 124: 00000000 00000000 00000000 01111100
  5. Spostati a destra, tenendo conto del segno

    int x = - 17, z; z = x >> 2; //z = -5: 11111111 11111111 11111111 11111011
  6. Sposta a destra senza riguardo al segno

    int x = - 17, z; // x: 11111111 11111111 11111111 11101111 z = x >>> 2; //z = 1073741819 // z: 00111111 11111111 11111111 11111011

Operazioni combinate

In Java, per le operazioni aritmetiche binarie, puoi usare combinato token operazione (composti): identificatore operazione = espressione Equivale alla seguente operazione: identificatore = identificatore operazione espressione Esempi:
  1. L'espressione x + = b significa x = x + b.
  2. L'espressione x - = b significa x = x - b.
  3. L'espressione x * = b significa x = x * b.
  4. L'espressione x / = b significa x = x / b.
  5. L'espressione x% = b significa x = x% b.
  6. L'espressione x & = b significa x = x & b.
  7. L'espressione x | = b significa x = x | B.
  8. L'espressione x ^ = b significa x = x ^ b.
  9. Espressione x<<= b означает x = x << b .
  10. L'espressione x >> = b significa x = x >> b.
  11. L'espressione x >>> = b significa x = x >>> b.

Operazioni di confronto

Java definisce i seguenti operatori di confronto:
  • "==" (uguale), "! =" (non uguale),
  • ">" (maggiore di), "> =" (maggiore o uguale),
  • " < " (меньше) " <= " (меньше или равно)
hanno due operandi e restituiscono un valore booleano corrispondente al risultato del confronto ( falso o vero). Nota che quando si confrontano due valori per l'uguaglianza in Java, come in C e C ++, i simboli " == "(due segni di uguale senza spazio), in contrasto con l'operatore di assegnazione, che utilizza il" = ". L'utilizzo del simbolo" = "quando si confrontano due valori provoca un errore di compilazione o produce un risultato errato. Esempi di operazioni di confronto: booleano isEqual, isNonEqual, isGreater, isGreaterOrEqual, isLess, isLessOrEqual; int x1 = 5, x2 = 5, x3 = 3, x4 = 7; èuguale = x1 == x2; // isEqual = true isNonEqual = x1! = x2; // isNonEqual = false isGreater = x1> x3; // isGreater = true // isGreaterOrEqual = true isGreaterOrEqual = x2> = x3; è minore = x3< x1; // isLess = true isLessOrEqual = x1 <= x3; // isLessOrEqual = false

Operazioni booleane

Operazioni booleane vengono eseguiti su variabili booleane e il loro risultato è anche un valore di tipo booleano... Le seguenti operazioni booleane sono definite in Java:
  • negazione "!" - sostituire falso con vero, o viceversa;
  • Operazione AND "&" - il risultato è vero solo se entrambi gli operandi sono veri, altrimenti il ​​risultato è falso;
  • Operazione OR "|" - il risultato è vero solo se almeno uno degli operandi è vero, altrimenti il ​​risultato è falso.
  • Operazione XOR "^" - il risultato è vero solo se gli operandi non sono uguali tra loro, altrimenti il ​​risultato è falso.
Gli operatori "&", "|" e "^", così come i corrispondenti operatori bit per bit, possono essere utilizzati negli operatori di assegnazione composti: "& =", "| =" e "^ =" Inoltre, le operazioni " = sono applicabili agli operandi booleani. = "(uguale) e"! = "(non uguale). Come puoi vedere dalla definizione di OR e AND, l'operazione OR restituisce true quando il primo operando è vero, indipendentemente dal valore del secondo operando, e l'operatore AND restituisce false quando il primo operando è falso, indipendentemente da il valore del secondo operando. Java definisce altre due operazioni booleane: le seconde versioni dell'AND booleano e dell'OR, note come operazioni logiche di cortocircuito: l'AND abbreviato "&&" e l'OR abbreviato "||". Quando si utilizzano queste operazioni, il secondo operando non verrà affatto valutato, il che è utile nei casi in cui l'operazione corretta dell'operando destro dipende dal fatto che l'operando sinistro sia vero o falso. Esempi di operazioni booleane: booleano isInRange, isValid, isNotValid, isEqual, isNotEqual; intero x = 8; isInRange = x> 0 && x< 5 ; // isInRange = false isValid = x >0 || x> 5; // isValid = true isNotValid =! è valido; // isNotValid = false isEqual = isInRange == isValid; // isEqual = false // isNotEqual = true isNotEqual = isInRange! = isValid

Operazione condizionale

Un'operazione condizionale è scritta nella forma espressione-1?espressione-2:espressione-3. In questo caso, viene valutata prima l'espressione-1, che dovrebbe fornire un valore booleano, quindi, se l'espressione-1 è vera, l'espressione-2 viene valutata e restituita come risultato dell'operazione, oppure (se l'espressione-1 è falsa ) e l'espressione-3 viene restituita come risultato dell'operazione. Un esempio di operazione condizionale: x = n> 1? 0: 1; Alla variabile x verrà assegnato il valore 0 se n> 1 (espressione n> 1 vale vero) o 1 se n≤1 (espressione n> 1 vale falso).

Anzianità delle operazioni

Le operazioni nelle espressioni vengono tuttavia eseguite da sinistra a destra, in base alla loro priorità. Quindi operazioni di moltiplicazione nell'espressione y = x + z * 5; verrà eseguito prima dell'operazione di addizione perché la priorità dell'operazione di moltiplicazione è maggiore della priorità dell'operazione di addizione. Le priorità delle operazioni (in ordine decrescente di priorità) in Java sono mostrate nella Tabella. uno.
Le parentesi aumentano la precedenza delle operazioni che si trovano al loro interno. Quindi, se inserisci parentesi nell'espressione sopra: y = (x + z) * 5; quindi verrà eseguita prima l'operazione di addizione, quindi l'operazione di moltiplicazione. A volte le parentesi vengono usate semplicemente per rendere più leggibile l'espressione, ad esempio: (x> 1) && (x<= 5 ) ;

Digitare la conversione e il casting durante l'esecuzione delle operazioni

Nelle espressioni di assegnazione e aritmetiche si possono utilizzare letterali, variabili ed espressioni di diverso tipo, ad esempio: double y; byte x; y = x + 5; Questo esempio aggiunge la variabile byte x al letterale 5 (int) e assegna il risultato alla doppia variabile y. In Java, come nel linguaggio C, le conversioni di tipo nella valutazione delle espressioni possono essere eseguite automaticamente o utilizzando un operatore di cast. Tuttavia, le regole di casting sono in qualche modo diverse da quelle del linguaggio C, e in generale sono più rigide rispetto al linguaggio C. Quando si esegue un'operazione di assegnazione, la conversione del tipo avviene automaticamente se ampliamento trasformare(conversione allargata) e i due tipi sono compatibili... Le trasformazioni in ampliamento sono trasformazioni byte® breve® int® lungo® galleggiante® Doppio... Per le conversioni di ampliamento, i tipi numerici, inclusi interi e in virgola mobile, sono compatibili tra loro. Tuttavia, i tipi numerici non sono compatibili con i tipi char e booleani. Neanche i tipi char e boolean sono compatibili tra loro. Java esegue anche la conversione automatica del tipo quando memorizza una costante letterale intera (che è di tipo int per impostazione predefinita) in variabili di tipo byte, short o long (tuttavia, se il letterale ha un valore al di fuori dell'intervallo di valori validi per questo tipo, viene visualizzato un messaggio di errore: possibile perdita di precisione). Se la conversione è una conversione restrittiva, ovvero viene eseguita byte ¬ short ¬ char ¬ int ¬ long ¬ float ¬ double, tale conversione può comportare una perdita di precisione o una distorsione del numero. Pertanto, con le conversioni restringenti, quando il programma viene compilato, viene visualizzato un messaggio di diagnostica sull'incompatibilità di tipo e i file di classe non vengono creati. Questo messaggio verrà visualizzato anche quando si tenta di convertire espressioni di tipo byte o short in una variabile di tipo char. Se è comunque necessario eseguire tali conversioni, viene utilizzata un'operazione di cast, che ha il seguente formato: ( tipo di conversione) senso, dove tipo di conversione definisce il tipo in cui il dato dovrebbe essere convertito senso, ad esempio, come risultato dell'esecuzione di operatori: byte x = 71; simbolo carattere = (carattere) x; la variabile simbolo sarà impostata su "G". Se un valore a virgola mobile è assegnato a un tipo intero, allora (se il valore a virgola mobile ha una parte frazionaria), si verifica anche una conversione di tipo esplicita troncamento(troncamento) numeri. Quindi, come risultato dell'esecuzione dell'operatore int x = (int) 77,85; la variabile x sarà impostata su 77. Se il valore assegnato è fuori intervallo conversioni di tipo , quindi il risultato della conversione sarà il resto della divisione del valore per il modulo dell'intervallo del tipo assegnato (per i numeri di tipo byte, il modulo dell'intervallo sarà 256, in breve - 65536, per int - 4294967296 , e a lungo - 18446744073709551616). Ad esempio, come risultato dell'istruzione byte x = (byte) 514; la variabile x sarà impostata su 2. Quando si convertono numeri interi o reali in dati di tipo char, la conversione in un carattere avviene se il numero originale è compreso nell'intervallo da 0 a 127, altrimenti il ​​carattere assume il valore "?". Quando si eseguono conversioni aritmetiche e bit per bit, tutti i valori byte e short, nonché char, vengono espansi in int, (mentre il valore numerico del codice carattere viene utilizzato nei calcoli per char) quindi, se almeno un operando è di tipo long , il tipo dell'espressione intera viene esteso a long. Se uno degli operandi è di tipo float, il tipo dell'espressione completa viene espanso in float e se uno degli operandi è di tipo double, il tipo del risultato sarà double. Quindi, se le variabili sono dichiarate byte a, c; b breve; quindi nell'espressione a + b * c - 15 L + 1.5F + 1.08 - 10; prima, prima di calcolare a + b * c, i valori delle variabili verranno espansi a int, quindi, poiché la costante 15 è di tipo long, il risultato del calcolo verrà aumentato a long prima della sottrazione. Successivamente, poiché il letterale 1.5 è di tipo float, il risultato del calcolo di a + b * c - 15L verrà espanso in float prima di essere aggiunto a questo letterale. Prima di eseguire l'addizione con il numero 1.08, il risultato dei calcoli precedenti verrà espanso a double (poiché le costanti reali sono di tipo double per impostazione predefinita) e, infine, prima di eseguire l'ultima addizione, il letterale 10 (di default int) sarà ampliato al doppio. Pertanto, il risultato della valutazione dell'espressione sarà di tipo double. Le estensioni di tipo automatiche (in particolare le estensioni short e byte di int) possono causare errori in fase di compilazione non riconosciuti. Ad esempio, negli operatori: byte x = 30, y = 5; x = x + y; prima che venga eseguita l'addizione, il valore delle variabili x e y verrà espanso in int, quindi verrà visualizzato un messaggio di errore quando si tenta di assegnare il risultato di un calcolo di tipo int a una variabile di tipo byte. Per evitare ciò è necessario utilizzare una conversione di tipo esplicita nel secondo operatore: x = (byte) (x + y); È necessario racchiudere l'espressione x + y tra parentesi perché la priorità del cast racchiuso tra parentesi è maggiore della priorità dell'operazione di addizione. A proposito, se scrivi il secondo operatore come: x + = y; non ci sarà alcun messaggio di errore. Link al primo

Sposta a destra senza riguardo al segno

Come mostrato, ad ogni esecuzione, l'"operazione" riempie automaticamente il bit più significativo con il suo contenuto precedente. Di conseguenza, il segno del valore viene preservato. Tuttavia, questo a volte è indesiderabile. Ad esempio, quando si esegue uno spostamento a destra su un valore che non è numerico, l'uso di bit di segno aggiuntivi potrebbe essere indesiderabile. Questa situazione è comune quando si lavora con valori di pixel e grafica. Tipicamente, in questi casi, è richiesto uno spostamento di zero alla posizione del bit più significativo, indipendentemente dal suo valore originale. Questa azione è chiamata spostamento a destra indipendentemente dal segno. Per eseguirlo, utilizzare l'operazione di spostamento a destra ignorata dal segno Java, >>>, che inserisce sempre uno zero nella posizione del bit più significativo.

Il seguente frammento di codice mostra l'uso dell'operatore >>>. In questo esempio, il valore della variabile a è impostato su -1, con tutti i 32 bit della sua rappresentazione binaria uguali a 1. Questo valore viene quindi spostato di 24 bit a destra, riempiendo i 24 bit più significativi con zeri e ignorando il segno aggiuntivo comunemente usato bit. Di conseguenza, il valore di a diventa uguale a 255.

int a = -1;
a = a >>> 24;

Spesso, l'operazione >>> non è utile come vorremmo, poiché ha senso solo per i valori a 32 e 64 bit. Ricorda che i valori più piccoli vengono automaticamente promossi a int nelle espressioni. Ciò significa applicare bit di segno aggiuntivi ed eseguire uno spostamento relativo ai valori a 32 bit, non ai valori a 8 o 16 bit. Cioè, il programmatore potrebbe implicare l'esecuzione di uno spostamento a destra insensibile al segno su un valore di byte e il riempimento con zeri a partire dal bit 7.

Tuttavia, in realtà non è così, poiché lo spostamento effettivo verrà eseguito su un valore a 32 bit. Il seguente programma dimostra questo effetto.

// Shift indipendentemente dal segno del valore del tipo di byte.
classe ByteUShift (
static public void main (String args) (
carattere esadecimale = (
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c "," d "," e "," f ");
byte b = (byte) 0xfl;
byte c = (byte) (b "4);
byte d = (byte) (b> "4);
byte e = (byte) ((b & 0xff) "4);
System.out.println ("b = 0x" + esadecimale [(b "4) & 0x0f] + esadecimale);
System, out .println ("b" 4 = 0x "+ esadecimale [(c" 4) & 0x0f] + esadecimale);
System, out .println ("b"> 4 = 0x "+ esadecimale [(d" 4) & 0x0f] + esadecimale);
System.out.println ("(b & 0xff)" 4 = 0x "+ esadecimale [(e" 4) S 0x0f] + esadecimale);
}
}

Dal seguente output di questo programma, puoi vedere che l'operazione> non fa nulla sui valori dei byte. Per questo esempio, è stato selezionato un valore di byte negativo arbitrario come valore per b. Quindi a c viene assegnato il valore di b byte, spostato a destra di quattro posizioni:, che è uguale a Oxff a causa dell'uso di bit di segno aggiuntivi. A D viene quindi assegnato il valore di b byte, spostato a destra di quattro posizioni indipendentemente dal segno, che avrebbe dovuto essere OxOf, ma in realtà, a causa dell'uso di bit di segno aggiuntivi durante la promozione di b a int prima di eseguire lo spostamento , pari a Oxff. L'ultima espressione imposta il valore di e al valore in byte di b, mascherato a 8 bit utilizzando l'operazione AND e quindi spostato di quattro posizioni a destra, che fornisce il valore atteso di OxOf. Si noti che l'operazione di spostamento a destra senza segno non è stata applicata a d perché lo stato del bit di segno dopo l'operazione AND era noto.

Operazioni di assegnazione composita bit per bit

Come le operazioni algebriche, tutte le operazioni binarie bit per bit hanno una forma composta che combina un'operazione bit per bit con un'operazione di assegnazione. Ad esempio, i seguenti due operatori che spostano a destra di quattro posizioni nel valore di a sono equivalenti:

Analogamente, sono equivalenti i seguenti due operatori, che assegnano alla variabile a il risultato dell'esecuzione dell'operazione bit a bit a OR b:

a = a | B;
a|=b;

Il seguente programma crea diverse variabili intere e quindi utilizza operazioni di assegnazione bit a bit composte per manipolare tali variabili:

class OpBitEquals public static void main (String args) (int a = 1;
intero b = 2;
intero c = 3;
a|= 4;
b> = 1;
c un ^ = c;
System.out.println ("a =" + a);
System.out.println ("b =" + b);
System.out.println ("c =" + c);
}
}

Questo programma produce il seguente output.

Java fornisce un ricco set di operatori per la manipolazione delle variabili. Tutti gli operatori Java possono essere suddivisi nei seguenti gruppi:

  • operatori aritmetici;
  • operatori di confronto;
  • operatori bit a bit;
  • operatori logici;
  • operatori di assegnazione;
  • altri operatori.

Operatori aritmetici

Operatori aritmetici- sono usati nelle espressioni matematiche nello stesso modo in cui sono usati in algebra. Supponiamo che la variabile intera A sia 10 e la variabile B sia 20. La tabella seguente elenca gli operatori aritmetici in Java:

Esempio

Il seguente semplice esempio mostra gli operatori aritmetici a livello di codice. Copia e incolla il seguente codice java nel file test.java, compila ed esegui questo programma:

Classe pubblica Test (public static void main (String args) (int a = 10; int b = 20; int c = 25; int d = 25; System.out.println ("a + b =" + (a + b )); System.out.println ("a - b =" + (a - b)); System.out.println ("a * b =" + (a * b)); System.out.println (" b / a = "+ (b / a)); System.out.println (" b% a = "+ (b% a)); System.out.println (" c% a = "+ (c% a )); System.out.println ("a ++ =" + (a ++)); System.out.println ("b-- =" + (a--)); // Verifica la differenza in d ++ e ++ d System .out.println ("d ++ =" + (d ++)); System.out.println ("++ d =" + (++ d));))

A + b = 30 a - b = -10 a * b = 200 b / a = 2 b% a = 0 c% a = 5 a ++ = 10 b-- = 11 d ++ = 25 ++ d = 27

Operatori di confronto

I seguenti operatori di confronto sono supportati nel linguaggio Java. Supponiamo che la variabile A sia 10 e la variabile B sia 20. La tabella seguente elenca gli operatori relazionali o di confronto in Java:

OperatoreDescrizioneEsempio
== Controlla se i valori di due operandi sono uguali o meno, in caso affermativo, la condizione diventa vera(A == B) - non corretto
!= Controlla se i valori di due operandi sono uguali o meno, se i valori non sono uguali, la condizione diventa vera(A! = B) - il valore è vero
> Controlla se il valore dell'operando di sinistra è maggiore del valore dell'operando di destra, in caso affermativo, la condizione diventa vera(A> B) - non vero
Controlla se il valore dell'operando di sinistra è minore del valore dell'operando di destra, in caso affermativo, la condizione diventa vera(UN
>= Controlla se il valore dell'operando di sinistra è maggiore o uguale al valore dell'operando di destra, in caso affermativo, la condizione diventa vera(A> = B) - i valori non sono corretti
Controlla se il valore dell'operando di sinistra è minore o uguale al valore dell'operando di destra, in caso affermativo, la condizione diventa vera(UN

Esempio

Il seguente semplice esempio mostra a livello di codice gli operatori di confronto in Java. Copia e incolla il seguente codice java nel file test.java, compila ed esegui questo programma:

Classe pubblica Test (public static void main (String args) (int a = 10; int b = 20; System.out.println ("a == b =" + (a == b)); System.out.println ("a! = b =" + (a! = b)); System.out.println ("a> b =" + (a> b)); System.out.println ("a = a =" + (b> = a)); System.out.println ("b

A == b = falso a! = B = vero a> b = falso a = a = vero b

Operatori bit a bit

Java definisce diversi operatori bit a bit che possono essere applicati ai tipi interi: int, long, short, char e byte. In Java, l'operatore bit a bit lavora sui bit ed esegue l'operazione bit per bit. Supponiamo se a = 60; e b = 13; quindi in binario saranno i seguenti:

a = 0011 1100
b = 0000 1101
-----------------
a e b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~ a = 1100 0011

Supponiamo che la variabile intera A sia 60 e la variabile B sia 13. La seguente tabella elenca gli operatori bit a bit in Java:

OperatoreDescrizioneEsempio
& (e bit a bit)L'operatore AND binario copia un po' nel risultato se esiste in entrambi gli operandi.(A e B) daranno 12 che è 0000 1100
| (bit a bit o)L'operatore binario OR copia un bit se esiste in uno qualsiasi degli operandi.(A | B) darà 61 che è 0011 1101
^ (bit a bit booleano o)L'operatore XOR binario copia un bit se è impostato in un operando, ma non in entrambi.(A ^ B) darà 49 che è 0011 0001
~ (complemento bit a bit)L'operatore di complemento binario e ha l'effetto di "capovolgere" i bit.(~ A) darà -61, che è la forma complementare di 1100 0011 in notazione binaria
Operatore binario shift sinistro. Il valore degli operandi di sinistra viene spostato a sinistra del numero di bit specificato dall'operando di destra.UN
>> (sposta a destra)Operatore binario di spostamento a destra. Il valore degli operandi di destra viene spostato a destra del numero di bit specificato dall'operando di sinistra.A >> 2 darà 15 che è 1111
>>> (spostamento zero a destra)Operatore di spostamento a destra zero. Il valore degli operandi di sinistra viene spostato a destra del numero di bit specificato dall'operando di destra e i valori spostati vengono riempiti con zeri.A >>> 2 darà 15 che è 0000 1111

Esempio

Il seguente semplice esempio mostra gli operatori a livello di codice a livello di codice in Java. Copia e incolla il seguente codice java nel file test.java, compila ed esegui questo programma:

Public class Test ( public static void main (String args) (int a = 60; / * 60 = 0011 1100 * / int b = 13; / * 13 = 0000 1101 * / int c = 0; c = a & b; / * 12 = 0000 1100 * / System.out.println ("a & b =" + c); c = a | b; / * 61 = 0011 1101 * / System.out.println ("a | b =" + c); c = a ^ b; / * 49 = 0011 0001 * / System.out.println ("a ^ b =" + c); c = ~ a; / * - 61 = 1100 0011 * / System. out.println ("~ a =" + c); c = a> 2; / * 215 = 1111 * / System.out.println ("a >> 2 =" + c); c = a >>> 2 ; / * 215 = 0000 1111 * / System.out.println ("a >>> 2 =" + c);))

Otterrai il seguente output:

A & b = 12 a | b = 61 a ^ b = 49 ~ a = -61 a> 15 a >>> 15

Operatori logici

Supponiamo che la variabile booleana A sia vera e la variabile B sia falsa. La tabella seguente elenca gli operatori logici in Java:

Esempio

Classe pubblica Test (public static void main (String args) (boolean a = true; boolean b = false; System.out.println ("a && b =" + (a && b)); System.out.println (" a | | b = "+ (a || b)); System.out.println ("! (a && b) = "+! (a && b));))

Questo produrrà il seguente output:

A && b = falso a || b = vero! (a && b) = vero

Operatori di assegnazione

I seguenti operatori di assegnazione sono supportati dal linguaggio Java:

Operatore Descrizione Esempio
= Operatore di assegnazione semplice, assegna i valori dal lato destro degli operandi al lato sinistro C = A + B, assegnerà il valore di A + B a C
+= L'operatore di assegnazione "Append", assegna all'operando di sinistra i valori di quello di destra C + = A, equivalente a C = C + A
-= L'operatore di assegnazione "Sottrazione", sottrae l'operando di sinistra dall'operando di destra C - = A, equivalente a C = C - A
*= L'operatore di assegnazione "Moltiplicazione", moltiplica l'operando di destra per l'operando di sinistra C * = A è equivalente a C = C * A
/= L'operatore di assegnazione "Divisione", divide l'operando sinistro per l'operando destro C / = A è equivalente a C = C / A
%= L'operatore di assegnazione "Modulo", prende un modulo utilizzando due operandi e assegna il suo risultato all'operando di sinistra C% = A, equivalente a C = C% A
Operatore di assegnazione spostamento a sinistra C
>>= Sposta l'operatore di assegnazione a destra C >> = 2, è come C = C >> 2
&= Operatore di assegnazione "AND" bit a bit C & = 2, è come C = C & 2
^= Operatore di assegnazione "OR" esclusivo bit per bit ("XOR") C ^ = 2, è come C = C ^ 2
|= Operatore di assegnazione OR (OR) bit per bit C | = 2, è come C = C | 2

Esempio

Il seguente semplice esempio mostra gli operatori logici a livello di codice in Java. Copia e incolla il seguente codice java nel file test.java, compila ed esegui questo programma:

Classe pubblica Test ( public static void main (String args) (int a = 10; int b = 20; int c = 0; c = a + b; System.out.println ("c = a + b =" + c ); c + = a; System.out.println ("c + = a =" + c); c - = a; System.out.println ("c - = a =" + c); c * = a ; System.out.println ("c * = a =" + c); a = 10; c = 15; c / = a; System.out.println ("c / = a =" + c); a = 10; c = 15; c% = a; System.out.println ("c% = a =" + c); c> = 2; System.out.println ("c >> = 2 =" + c) ; c >> = 2; System.out.println ("c >> = a =" + c); c & = a; System.out.println ("c & = 2 =" + c); c ^ = a; System.out.println ("c ^ = a =" + c); c | = a; System.out.println ("c | = a =" + c);))

Otterrai il seguente output:

C = a + b = 30 c + = a = 40 c - = a = 30 c * = a = 300 c / = a = 1 c% = a = 5 c> = 2 = 5 c >> = 2 = 1 c & = a = 0 c ^ = a = 10 c | = a = 10

Altri operatori

Ci sono molti altri operatori supportati dal linguaggio Java.

Operatore ternario o operatore condizionale (? :)

Operatore ternario- un operatore composto da tre operandi e utilizzato per valutare espressioni di tipo booleano. L'operatore ternario in Java è anche noto come operatore condizionale. Questo. Lo scopo di un operatore ternario o condizionale è decidere quale valore deve essere assegnato a una variabile. L'operatore si scrive come:

Variabile x = (espressione)? se vero: se falso

Esempio

Di seguito è riportato un esempio:

Classe pubblica Test (public static void main (String args) (int a, b; a = 10; b = (a == 1)? 20: 30; System.out.println ("Value b:" + b); b = (a == 10)? 20:30; System.out.println ("Valore b:" + b);))

Otterrai il seguente output:

Valore B: 30 Valore b: 20

Istanza dell'operatore

Istanza dell'operatore- verifica se l'oggetto è di un certo tipo (tipo classe o tipo interfaccia) e viene utilizzato solo per le variabili dell'oggetto referenziato. L'operatore instanceof si scrive come:

(Variabile oggetto di riferimento) instanceof (classe/tipo di interfaccia)

Esempi di

Se la variabile dell'oggetto referenziato sul lato sinistro dell'istruzione supera il test per la classe/tipo dell'interfaccia sul lato destro, il risultato è vero. Di seguito è riportato un esempio e una descrizione dell'operatore instanceof:

Public class Test (public static void main (String args) (String name = "Oleg"; // Quanto segue restituirà true perché il tipo è String boolean result = name instanceof String; System.out.println (risultato);))

Otterrai il seguente output:

Questo operatore restituirà ancora true se l'oggetto confrontato è compatibile con il tipo per il diritto di assegnazione. Segue un altro esempio:

Class Vehicle () public class Car estende Vehicle (public static void main (String args) (Vehicle a = new Car (); boolean result = a instanceof Car; System.out.println (risultato);))

Otterrai il seguente output:

Precedenza degli operatori in Java

La precedenza dell'operatore determina il raggruppamento dei termini in un'espressione. Ciò influisce sul modo in cui viene valutata l'espressione. Alcuni operatori hanno una priorità più alta di altri; ad esempio l'operatore di moltiplicazione ha una precedenza maggiore rispetto all'operatore di addizione:

Ad esempio, x = 7 + 3 * 2. Qui a x viene assegnato il valore 13, non 20, perché l'operatore "*" ha una precedenza maggiore di "+", quindi prima viene moltiplicato "3 * 2" e poi "7 " si aggiunge ".

Nella tabella, gli operatori con la priorità più alta sono posti in alto e il livello di priorità è abbassato verso il basso della tabella. In un'espressione, gli operatori con precedenza elevata in Java verranno valutati da sinistra a destra.

Categoria Operatore Associatività
suffisso (). (punto) Da sinistra a destra
unario ++ - - ! ~ Da destra a sinistra
moltiplicativo * / % Da sinistra a destra
Additivo + - Da sinistra a destra
Cambio >> >>> Da sinistra a destra
relazionale > >= Da sinistra a destra
Uguaglianza == != Da sinistra a destra
Bit a bit "AND" & Da sinistra a destra
Bitwise esclusivo "OR" ("XOR") ^ Da sinistra a destra
Bit a bit "OR" ("OR") | Da sinistra a destra
"AND" logico && Da sinistra a destra
"OR" logico ("OR") || Da sinistra a destra
Condizionale ?: Da destra a sinistra
Incarico = += -= *= /= %= >>= Da destra a sinistra
Virgola , Da sinistra a destra

Nella prossima lezione parleremo del controllo del ciclo nella programmazione Java. Questa lezione descriverà i diversi tipi di loop, come possono essere utilizzati i loop nello sviluppo del software e per quali scopi vengono utilizzati.

Mi sembra che sia giunto il momento di iniziare a sviluppare un documento, che stabilisca chiaramente cosa i cittadini possono fare nel loro tempo libero e cosa non dovrebbero.

Dal film "Melodia dimenticata per flauto"

Tutti gli operatori Java possono essere divisi in quattro gruppi: aritmetici, logici, bit per bit e di confronto. Consideriamo in sequenza ogni gruppo di operatori. Cominciamo con l'aritmetica. Questi operatori sono elencati nella tabella. 1.2.


Tabella 1.2. Operatori aritmetici Java

Operatore Nome Spiegazione
+ aggiunta Operatore binario. Il risultato del comando a + b è la somma dei valori delle variabili a e b
- Sottrazione Operatore binario. Il risultato del comando a-b è la differenza tra i valori delle variabili a e b
* Moltiplicazione Operatore binario. Il risultato del comando a * b è il prodotto dei valori delle variabili a e b
/ Divisione Operatore binario. Il risultato del comando a/b è il quoziente della divisione dei valori delle variabili a e b. Per gli operandi interi, la divisione tra interi viene eseguita per impostazione predefinita
% Resto Operatore binario. Il risultato del comando a% b è il resto della divisione intera dei valori delle variabili a e b
+= Addizione (modulo semplificato con compito) Una forma semplificata dell'operatore di addizione e assegnazione. Il comando a + = b è equivalente al comando a = a + b
-= Sottrazione (forma semplificata con assegnazione) Una forma semplificata dell'operatore sottrazione-assegnazione. Il comando a- = b è equivalente al comando a = a-b
*= Moltiplicazione (modulo di assegnazione semplificato) Una forma semplificata dell'operatore di moltiplicazione-assegnazione. Il comando a * = b è equivalente al comando a = a * b
/= Divisione (modulo semplificato con incarico) Una forma semplificata dell'operatore di divisione di assegnazione. Il comando a / = b è equivalente al comando a = a / b
%= Resto (forma semplificata) Una forma semplificata dell'operatore di assegnazione del resto. Il comando a% = b è equivalente al comando a = a% b
++ Incremento Operatore unario. Il comando a ++ (o ++ a) è equivalente al comando a = a + 1
-- Decremento Operatore unario. Il comando a-- (o --a) è equivalente al comando a = a-1

Questi operatori hanno alcune peculiarità. Prima di tutto, prestiamo attenzione all'operatore di divisione /. Se gli operandi sono interi, la divisione intera viene restituita come valore. Considera la sequenza di comandi:

int a = 5, b = 2; doppia x = a/b;

In questo esempio, x è impostato su 2.0, non su 2.5 come ci si potrebbe aspettare. Il punto è che l'espressione a/b viene valutata per prima. Nella misura in cui


gli operandi sono interi, viene eseguita la divisione tra interi. E solo dopo, il valore risultante viene convertito nel doppio formato e assegnato alla variabile x.

Per eseguire la normale divisione con operandi interi, viene specificato un identificatore di tipo double (o float) tra parentesi prima dell'espressione con l'operatore di divisione. Ad esempio, in questo modo:

doppio x = (doppio) a/b;

La variabile x ora è 2.5.

Java, come C++, ha un gruppo di operatori aritmetici di assegnazione semplificati. Se op è uno degli operatori di addizione, moltiplicazione, divisione e resto, la forma semplificata di questo operatore di assegnazione è op =. Anche questo è un operatore binario, come l'operatore op, e un comando come x op = y è equivalente al comando x = x op y.

Altri due operatori unari estremamente utili sono gli operatori di incremento (++) e decremento (-). L'operatore di decremento riduce il valore dell'operando di uno e l'operatore di decremento riduce l'operando di uno. In altre parole, x ++ è equivalente a x = x + 1 e x-- è equivalente a x = x-1. Gli operatori di incremento e decremento non hanno solo la forma postfissa presentata qui (l'operatore segue l'operando: x ++ o x--), ma anche la forma prefissa (l'operatore è posto prima dell'operando:

X o -x). Dal punto di vista dell'azione sull'operando, non fa differenza se viene utilizzata la forma prefissa o postfissa dell'operatore. Tuttavia, se un'espressione con un operatore di incremento o decremento fa parte di un'espressione più complessa, vi è una differenza nelle forme prefisso e suffisso degli operatori di incremento e decremento. Se viene utilizzata la forma del prefisso dell'operatore, il valore dell'operando viene modificato per primo e solo dopo viene valutata l'espressione. Se l'operatore è in formato postfisso, l'espressione viene valutata per prima, quindi il valore dell'operando viene modificato. Facciamo un piccolo esempio:

In questo caso, dopo aver eseguito i comandi, la variabile n avrà il valore 11, e la variabile m avrà il valore 10. Al momento dell'esecuzione del comando m = n++, il valore della variabile n è 10. Poiché la forma postfissa dell'operatore di incremento viene utilizzata nel comando m = n ++, al valore viene assegnata prima la variabile m, quindi il valore della variabile n viene aumentato di uno.

Risultato diverso dell'esecuzione dei seguenti comandi:


In questo caso, entrambe le variabili (n e m) hanno valore 11. Poiché nel comando m = ++ n viene utilizzata la forma dell'incremento del prefisso, prima il valore della variabile n viene aumentato di uno, quindi il valore della la variabile n è assegnata alla variabile m.

Il gruppo successivo è formato da operatori logici. Gli operandi degli operatori logici sono variabili e letterali booleani. Gli operatori logici Java sono elencati nella tabella. 1.3.

Tabella 1.3. Operatori logici Java

Operatore Nome Spiegazione
& AND . logico Operatore binario. Il risultato dell'operazione A&B è vero se i valori di entrambi gli operandi sono veri. In caso contrario, restituisce false.
&& AND . logico abbreviato Operatore binario. La particolarità dell'operatore, rispetto all'operatore &, è che se il valore del primo operando è falso, allora il valore del secondo operando non viene verificato.
| OR logico Operatore binario. Il risultato dell'operazione A | B è vero se il valore di almeno un operando è vero. In caso contrario, restituisce false.
|| OR logico abbreviato Operatore binario. La particolarità dell'operatore, rispetto all'operatore |, è che se il valore del primo operando è vero, allora il valore del secondo operando non viene verificato
^ Esclusivo o Operatore binario. Il risultato dell'operazione A ^ B è vero se il valore di uno e un solo operando è vero. In caso contrario, restituisce false.
! negazione logica Operatore unario. Il risultato del comando!A è vero se il valore dell'operando A è falso. Se il valore dell'operando A è vero, il risultato del comando!A è falso.

Gli operatori logici sono comunemente usati come condizioni nelle istruzioni condizionali e di ciclo.

Tavolo 1.4 elenca gli operatori di confronto utilizzati in Java.

Tabella 1.4. Operatori di confronto Java


Operatore Nome Spiegazione
< Meno Il risultato dell'operazione A
<= Meno o uguale Il risultato dell'operazione A<=B является значения true, если значение операнда A не больше значения операн- да B. В противном случае значением является false
> Di più Il risultato dell'operazione A> B è vero se il valore dell'operando A è maggiore del valore dell'operando B. Altrimenti il ​​valore è falso
>= Più o uguale Il risultato dell'operazione A> = B è vero se il valore dell'operando A non è inferiore al valore dell'operando B. Altrimenti il ​​valore è falso
!= Non uguale Il risultato dell'operazione A! = B è vero se gli operandi A e B hanno valori diversi. In caso contrario, il valore è falso.

Gli operatori di confronto sono comunemente usati insieme agli operatori logici.

Per comprendere i principi di funzionamento degli operatori bit a bit, è necessario avere almeno una conoscenza di base della rappresentazione binaria dei numeri. Ricordiamo al lettore alcuni dei punti principali.

‰ Nella notazione binaria, la notazione posizionale di un numero contiene zero e uno.

Il bit più significativo (primo da sinistra) determina il segno del numero. Per i numeri positivi, il bit più significativo è zero, per i numeri negativi - uno.

‰ Traduzione binaria di un numero positivo da un posizionale


noah record


bnbn-1...B 2B 1B 0


(bi può assumere valori 0 o 1, più significativi


bit per i numeri positivi bn= 0) in decimale si fa in questo modo:



n-1 n





+ ... + bn-12



‰ Per convertire un numero binario negativo in rappresentazione decimale, viene eseguita l'inversione del codice bit per bit (per l'operazione di inversione bit per bit - vedi sotto), il numero binario risultante viene convertito nel sistema decimale, viene aggiunto uno (e un segno meno è aggiunto).

‰ Per convertire un numero negativo dal sistema decimale al sistema binario, sottrarre uno dal modulo del numero, tradurre il risultato in un codice binario e poi questo codice viene invertito.

Moltiplicare un numero per due equivale a spostare un bit a sinistra della notazione posizionale del numero (riempire il primo bit con zero).

Gli operatori bit a bit di Java sono descritti nella tabella. 1.5.


Tabella 1.5. Operatori bit a bit Java

Operatore Nome Spiegazione
& AND . bit a bit Operatore binario. L'operazione AND logico viene applicata a ciascuna coppia di bit degli operandi. Il risultato è 1 se ciascuno dei due bit confrontati è 1. Altrimenti, il risultato è 0
| OR bit a bit Operatore binario. L'operazione OR logico viene applicata a ciascuna coppia di bit degli operandi. Il risultato è 1 se almeno uno dei due bit confrontati è 1. Altrimenti il ​​risultato è 0
^ OR ESCLUSIVO bit a bit Operatore binario. L'operazione logica OR ESCLUSIVO viene applicata a ciascuna coppia di bit negli operandi. Il risultato è 1 se uno e solo uno dei due bit confrontati è 1. Altrimenti il ​​risultato è 0
~ Negazione bit a bit Operatore unario. Viene eseguita l'inversione del codice binario: 0 passa a 1 e 1 passa a 0
>> Sposta a destra Operatore binario. Il risultato è il numero ottenuto spostando a destra nella rappresentazione posizionale del primo operando (a sinistra dell'operatore) del numero di bit specificato dal secondo operando (a destra dell'operatore). Ciò non modifica il valore iniziale del primo operando. I bit di ordine inferiore vengono persi e i bit di ordine elevato vengono riempiti con un bit di segno duplicato.
<< Tasto maiuscolo di sinistra Operatore binario. Il risultato è un numero ottenuto spostando a sinistra nella rappresentazione posizionale del primo operando (a sinistra dell'operatore) del numero di bit specificato dal secondo operando (a destra dell'operatore). Ciò non modifica il valore iniziale del primo operando. I bit di ordine inferiore vengono riempiti con zeri e i bit di ordine elevato vengono persi.
>>> Shift a destra senza segno Operatore binario. Il risultato è il numero ottenuto spostando a destra nella rappresentazione posizionale del primo operando (a sinistra dell'operatore) del numero di bit specificato dal secondo operando (a destra dell'operatore). Ciò non modifica il valore iniziale del primo operando. I bit di ordine inferiore vengono persi e i bit di ordine superiore vengono riempiti con zeri.
&= Una forma semplificata dell'assegnazione e dell'operatore bit a bit Comando come A & A = A & B
|= La forma semplificata dell'operatore bit a bit | con incarico Comando della forma A | = B è equivalente al comando A = A | B

Operatore Nome Spiegazione
^= Semplificato Un comando come A ^ = B è l'equivalente del comando
forma battuta
operatore ^ A = A ^ B
con incarico
>>= Semplificato Un comando della forma A >> = B è l'equivalente del comando
forma del bit
operatore >> A = A >> B
con incarico
<<= Semplificato Visualizza comando A<<=B является эквивалентом команды
forma del bit
operatore<< A = A<
con incarico
>>>= Semplificato Un comando come A >>> = B è l'equivalente del comando
forma del bit
esimo operatore >>> A = A >>> B
con incarico

Con rare eccezioni, le operazioni bit per bit vengono utilizzate quando è necessario ottimizzare il programma in termini di prestazioni.

Oltre agli operatori elencati, Java ha un singolo operatore ternario (un operatore ha tre operandi). Formalmente, l'operatore è indicato come?:. La sintassi per chiamare questo operatore è la seguente:

condizione? valore_1: valore_2

Il primo operando specifica una condizione - un'espressione che restituisce un valore booleano come valore. Se il valore dell'espressione della condizione è vero, l'operatore ternario restituisce valore_1 come valore. Se il valore dell'espressione della condizione è falso, l'operatore ternario restituisce valore_2 come valore.

Alcune note sull'operatore di assegnazione (operatore =). In Java, l'operatore di assegnazione restituisce un valore. Un comando come x = y viene eseguito come segue. Innanzitutto, viene valutata l'espressione y, dopodiché questa espressione viene convertita al tipo della variabile x e quindi scritta su questa variabile. A causa del fatto che, a differenza di altri operatori con uguale precedenza, l'assegnazione viene eseguita da destra a sinistra, in Java sono validi comandi come x = y = z. In questo caso, il valore della variabile z viene assegnato prima alla variabile y, quindi il valore della variabile y viene assegnato alla variabile x.

Un'altra nota riguarda le forme semplificate degli operatori di assegnazione, cioè operatori della forma op =. Sebbene sia stato sostenuto che un comando della forma A op = B è equivalente a un comando A = A op B, questo non è del tutto vero. Quando si esegue un comando della forma A op = B, viene prima calcolata l'espressione A op B, quindi il valore risultante viene convertito nel tipo di variabile A e solo dopo viene assegnato alla variabile A. Poiché il casting al tipo di la variabile A viene eseguita, infatti, in modo esplicito, e nel comando A = A op B type casting implicito, la differenza può apparire


nell'uso di forme complete e semplificate di comandi di assegnazione. Considera un semplice esempio:

// Corretto: a + = 20;

// Sbagliato: a = a + b;

In questo caso, il comando a + = 20 è corretto, ma il comando a = a + b non lo è. Nel primo caso, il letterale 20 del tipo int viene "forzato" nel tipo byte a causa delle peculiarità dell'operatore + =. Nel secondo caso, il risultato della valutazione dell'espressione a + b viene automaticamente espanso al tipo int e il casting automatico dal tipo int al tipo byte è vietato.

Infine, diamo in tabella. 1.6 dati sulla precedenza di vari operatori in Java.

Tabella 1.6. Priorità dell'operatore in Java

Priorità operatori
Parentesi (), parentesi quadre e operatore punto
Incrementa ++, decrementa -, negativi ~ e!
Moltiplica *, dividi / e calcola il resto%
Addizione + e sottrazione -
Spostamenti bit a bit >>,<< и >>>
Maggiore di>, maggiore o uguale a> =, minore o uguale<= и меньше <
Uguale == e disuguale! =
AND bit per bit e
OR esclusivo bit per bit ^
OR bit per bit |
booleano AND &&
OR logico ||
Operatore ternario?:
Assegnazione = e forme abbreviate di operatori come op =

Gli operatori di uguale precedenza (eccetto l'assegnazione) vengono eseguiti da sinistra a destra. Nei casi in cui vi siano dubbi sulla precedenza degli operatori e sulla sequenza di valutazione delle espressioni, si consiglia di utilizzare le parentesi.

Principali articoli correlati