# Оператори

Операторът е знак, който **представлява действие**, например + е аритметичен оператор, който представлява добавяне.

### 1) Основни аритметични оператори

Основни аритметични оператори са: \
&#xNAN;**+** е за допълнение.\
&#xNAN;**–** е за изваждане.\
&#xNAN;**\*** е за умножение.\
&#xNAN;**/** е за разделяне.\
&#xNAN;**%** е за модуло деление.\
Забележка: Операторът % връща остатъка, например 10 % 5 би върнал 0

#### Пример за Аритметични оператори

```
public class ArithmeticOperatorDemo {
   public static void main(String[] args) {
      int num1 = 100;
      int num2 = 20;

      System.out.println("num1 + num2: " + (num1 + num2) );
      System.out.println("num1 - num2: " + (num1 - num2) );
      System.out.println("num1 * num2: " + (num1 * num2) ); 
      System.out.println("num1 / num2: " + (num1 / num2) );
      System.out.println("num1 % num2: " + (num1 % num2) );
   }
}
```

**Изход:**

```
num1 + num2: 120
num1 - num2: 80
num1 * num2: 2000
num1 / num2: 5
num1 % num2: 0
```

### 2) Оператори на присвояване

Оператори за присвояване =, +=, -=, \*=, /=, %=\
**num2 = num1** ще присвой стойноста на num1 на num2

**num2+=num1** съответства на num2 = num2+num1

**num2-=num1** съответства на num2 = num2-num1

**num2\*=num1** съответства на num2 = num2\*num1

**num2/=num1** съответства на num2 = num2/num1

**num2%=num1** съответства на num2 = num2%num1

#### Пример:

```
public class AssignmentOperatorDemo {
   public static void main(String[] args) {
      int num1 = 10;
      int num2 = 20;

      num2 = num1;
      System.out.println("= Output: "+num2);

      num2 += num1;
      System.out.println("+= Output: "+num2);
	      
      num2 -= num1;
      System.out.println("-= Output: "+num2);
	      
      num2 *= num1;
      System.out.println("*= Output: "+num2);
	      
      num2 /= num1;
      System.out.println("/= Output: "+num2);
	      
      num2 %= num1;
      System.out.println("%= Output: "+num2);
   }
}
```

**Output:**

```
= Output: 10
+= Output: 20
-= Output: 10
*= Output: 100
/= Output: 10
%= Output: 0
```

### 3) Автоматично увеличаване или намаляване

**num++** съответства на `num=num+1;`

**num–-** Съответства на `num=num-1;`

#### Пример:

```
public class AutoOperatorDemo {
   public static void main(String[] args){
      int num1=100;
      int num2=200;
      num1++;
      num2--;
      System.out.println("num1++ is: "+num1);
      System.out.println("num2-- is: "+num2);
   }
}
```

**Изход:**

```
num1++ is: 101
num2-- is: 199
```

### 4) Логически оператори

Логическите оператори се използват с двоични променливи. Те се използват главно в условни изрази и цикли за оценка на състояние.&#x20;

Логическите оператори в java са: &&, ||,!&#x20;

Да кажем, че имаме две булеви променливи b1 и b2.&#x20;

b1 && b2 ще върне true, ако и b1 и b2 са верни, иначе ще върне false.&#x20;

b1 || b2 ще върне false, ако и b1 и b2 са невярни, иначе ще върне истина.&#x20;

! b1 ще върне обратното на b1, това означава, че би било вярно, ако b1 е невярно и би върнало невярно, ако b1 е вярно.&#x20;

Пример за логически оператори

```
public class LogicalOperatorDemo {
   public static void main(String[] args) {
      boolean b1 = true;
      boolean b2 = false;

      System.out.println("b1 && b2: " + (b1&&b2));
      System.out.println("b1 || b2: " + (b1||b2));
      System.out.println("!(b1 && b2): " + !(b1&&b2));
   }
}
```

**Изход:**

```
b1 && b2: false
b1 || b2: true
!(b1 && b2): true
```

### 5) Оператори за сравнение

Имаме шест релационни оператора в Java: ==,! =,>, <,> =, <=&#x20;

\== връща true, ако лявата и дясната страна са равни&#x20;

! = връща true, ако лявата страна не е равна на дясната страна на оператора.&#x20;

\>връща true, ако лявата страна е по -голяма от дясната.&#x20;

< връща true, ако лявата страна е по -малка от дясната страна.&#x20;

\= връща true, ако лявата страна е по -голяма или равна на дясната страна.&#x20;

<= връща true, ако лявата страна е по -малка или равна на дясната страна. Пример за релационни оператори&#x20;

```
public class RelationalOperatorDemo {
   public static void main(String[] args) {
      int num1 = 10;
      int num2 = 50;
      if (num1==num2) {
	 System.out.println("num1 and num2 are equal");
      }
      else{
	 System.out.println("num1 and num2 are not equal");
      }

      if( num1 != num2 ){
	 System.out.println("num1 and num2 are not equal");
      }
      else{
	 System.out.println("num1 and num2 are equal");
      }

      if( num1 > num2 ){
	 System.out.println("num1 is greater than num2");
      }
      else{
	 System.out.println("num1 is not greater than num2");
      }

      if( num1 >= num2 ){
	 System.out.println("num1 is greater than or equal to num2");
      }
      else{
	 System.out.println("num1 is less than num2");
      }

      if( num1 < num2 ){
	 System.out.println("num1 is less than num2");
      }
      else{
	 System.out.println("num1 is not less than num2");
      }

      if( num1 <= num2){
	 System.out.println("num1 is less than or equal to num2");
      }
      else{
	 System.out.println("num1 is greater than num2");
      }
   }
}
```

**Изход:**

```
num1 and num2 are not equal
num1 and num2 are not equal
num1 is not greater than num2
num1 is less than num2
num1 is less than num2
num1 is less than or equal to num2
```

### 6) Битови Оператори

Има шест битови оператори: &, |, ^, \~, <<, >>

Да дефинираме две числа

int num1 = 11; /\* равен на 00001011\*/\
\
int num2 = 22; /\* равна на 00010110 \*/

Битовите оператор извършват битова обработка.\
**num1 & num2** сравнява битовите съответи на num1 и num2 и генерира 1, ако и двата бита са равни, иначе връща 0. В нашия случай би се върнало: 2 което е 00000010, защото в двоичната форма на num1 и num2 само във втори бита има съвпадение.

**num1 | num2** сравнява съответните битове num1 и num2 и генерира 1, ако или битът е 1, иначе връща 0. В нашия случай би върнало 31 което е 00011111

**num1 ^ num2** сравнява съответните битове num1 и num2 и генерира 1, ако не са равни, иначе връща 0. В нашия пример би се получило 29 което е еквивалентно на 00011101

**\~num1** е оператор на преобразуване, който просто променя бита от 0 на 1 и 1 на 0. В нашия пример би се върнало -12 която е  11110100

**num1 << 2** е ляв оператор на смяна, който премества битовете наляво, изхвърля най-левия бит и присвоява на най-десния бит стойност 0. В нашия случай продукцията е 44 което е еквивалентно на 00101100

**num1 >> 2** е десен оператор на смяна, който премества битовете надясно, изхвърля най-десния бит и присвоява на най-левия бит стойност 0. В нашия случай продукцията е 2, която е еквивалентна на 00000010

#### Пример за оператори на Bitwise

```
public class BitwiseOperatorDemo {
  public static void main(String[] args) {

     int num1 = 11;  /* 11 = 00001011 */
     int num2 = 22;  /* 22 = 00010110 */
     int result = 0;

     result = num1 & num2;   
     System.out.println("num1 & num2: "+result);

     result = num1 | num2;   
     System.out.println("num1 | num2: "+result);
    
     result = num1 ^ num2;   
     System.out.println("num1 ^ num2: "+result);
    
     result = ~num1;   
     System.out.println("~num1: "+result);
    
     result = num1 << 2;   
     System.out.println("num1 << 2: "+result); result = num1 >> 2;   
     System.out.println("num1 >> 2: "+result);
  }
}
```

**Изход:**

```
num1 & num2: 2
num1 | num2: 31
num1 ^ num2: 29
~num1: -12
num1 << 2: 44 num1 >> 2: 2
```

### 7) Троен оператор

Този оператор оценява булев израз и присвоява стойността от резултата.\
**Синтаксис:**

```
<тип данни> <идентификатор> = (израз) ? стойност при истина : стойност при лъжа
```

#### Пример:

```
public class TernaryOperatorDemo {

   public static void main(String[] args) {
        int num1, num2;
        num1 = 25;
        /* num1 is not equal to 10 that's why
	 * the second value after colon is assigned
	 * to the variable num2
	 */
	num2 = (num1 == 10) ? 100: 200;
	System.out.println( "num2: "+num2);

	/* num1 is equal to 25 that's why
	 * the first value is assigned
	 * to the variable num2
	 */
	num2 = (num1 == 25) ? 100: 200;
	System.out.println( "num2: "+num2);
   }
}
```

**Изход:**

```
num2: 200
num2: 100
```
