Java에서는 많은 수의 연산자들이 존재합니다. 연산자를 통해서 기초적인 것부터 시작해서 심화에 이르기까지 다양하게 사용합니다. 지금부터 그 다양한 연산자들을 알아보겠습니다.

 

연산자(Operator)란?

:  +, -, *, /, <, > 등등…  가장 기본적인 산술 연산자로 시작합니다.

 

피연산자(Operand) 

: 연산자의 기능(동작) 적용 대산(변수, 상수…)

 

 

1) 산술연산자 / 대입연산자

(=) 대입 연상자 : 연산자 오른쪽에 있는 값을 왼쪽 변수에 대입합니다(+ , - , * , /)

'+' 은 숫자,문자 둘다 더해준다. 
resultInt = num1 + num2;
System.out.println(num1 + "+" + num2+ "="+ resultInt); // 20+8=28
		 
resultInt = num1 - num2;
System.out.println(num1 + "-" + num2+ "="+ resultInt); // 20-8=12
		 
resultInt = num1 * num2;
System.out.println(num1 + "*" + num2+ "="+ resultInt); // 20*8=160

'/' int/int로 계산해주면 int의 값이 나온다. 결과값 = 2( 몫의 결과만 보여준다)
resultInt = num1 / num2;
System.out.println(num1 + "/" + num2+ "="+ resultInt); // 20/8=2

● % : 외쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눴을 때 얻게 되는 나머지를 반환합니다.

Ex) val = 7%3

resultInt = num1 % num2;
System.out.println(num1 + "%" + num2+ "="+ resultInt); // 20%8=4
		 
double num3 = 7.8 , num4 = 3.2; 
double resultDouble; 
		
resultDouble = num3 / num4; // 출력 : 7.8/3.2=2.4375
System.out.println(num3 + "/" + num4+ "="+ resultDouble);
		 
% 연산자 - 실수형에서 나머지 연산은 의미 없다. 
resultDouble = num3 % num4; // 출력 : 7.8%3.2=1.3999999999999995
System.out.println(num3 + "%" + num4+ "="+ resultDouble);

 

 

2) 복합대입연산자

 

가독성은 num = num+50 이 더 좋습니다. += 은 같은 기능을 할 수 있게 만든 연상자입니다.

? 복합대입연산자 사용할까요? 무엇을 강조하려고 하는 것일까요?

그냥 간단하게 풀어내기 위함이 아니라!!!!!

현재의 값에서 50누적하겠다는 의미가 담겨있고 그것을 강조하기 위해서 사용합니다.

num += 50; // num = num+50; 사이에 여백이 있으면 안됩니다. 
num -= 50; // num = num-50; 누적의 의미를 강조 	
num *= 50; // num = num*50; 누적의 의미를 강조 
num /= 50; // num = num/50; 누적의 의미를 강조 
num %= 50; // num = num%50; 누적의 의미를 강조  
		

 

 

3) 비교연산자 (Boolean)

 

특징 : 결과값을 True or False 로 출력합니다.

종류 : <, > , <=, >= , ==(좌우가 같다) , !=(다르다)

package 비교(관계)연산자;

public class 비교(관계)연산자{ 

public static void main(String[] args) {
		
System.out.println(350<200);
System.out.println(350>200);

System.out.println(350<=200);
System.out.println(350>=200);
		
System.out.println(350==200);
System.out.println(350!=200);
		

 

 

4) 논리연산자

 

: 피연산자로 Boolean 값만 올 수 있습니다.

 

&& : A&&B

A B 모두 True 이면 연산결과는 true (논리 AND)

 

|| : A||B

A B 둘 중 하나라도 True이면 연산 결과는 True(논리 OR)

 

! : !A (단항을 가짐)

연산결과는 ATrue 이면 false , A false이면 true(논리 NOT)

boolean X = false, Y = false; // 초기화
		
System.out.println(X+"&&"+Y+"="+(X&&Y)); // false&&false=false
System.out.println(X+"||"+Y+"="+(X||Y)); // false||false=false
		
X = false; Y = true;
System.out.println(X+"&&"+Y+"="+(X&&Y)); // false&&true=false
System.out.println(X+"||"+Y+"="+(X||Y)); // false||true=true
		
X = true; Y = false;
System.out.println(X+"&&"+Y+"="+(X&&Y)); // true&&false=false
System.out.println(X+"||"+Y+"="+(X||Y)); // false||true=true
		
X = true; Y = true; 
System.out.println(X+"&&"+Y+"="+(X&&Y)); // true&&true=true
System.out.println(X+"||"+Y+"="+(X||Y)); // true||true=true

 

논리연산자는 주로 비교연산자와 함께 활용으로 많이 사용합니다.

int num1 = 10, num2 = 20; boolean result;
		
비교연산자  + 논리연산자  
result = (num1 == 10) && (num2 == 30);
System.out.println((num1 == 10) && (num2 == 30));
System.out.println(result);
System.out.println((num1 == 10) + "&&" + (num2 == 30) + "=" + result);
System.out.println("result:" + result);

 

 

※ Short-Circuit Evaluation

result = ((num1+=10)<0) && ((num2 +=10) >0); 
가로를 없애버리면 원하는 피연산자로 연산이 되지 않습니다.  
System.out.println("결과:"+result);
System.out.println("num1:"+num1); // num1:10
System.out.println("num2:"+num2); // num2:0
(num1+=10)<0 : false 논리 연산자 && 는 앞의 코드가 false 이므로 결과는 false 이기 때문에
뒤 코드는 수행하지 않고 바로 결과(false)를 반환합니다. 그렇기 때문에 num2 = 0 이라는 값이 출력됩니다.

 

5) 증감연산자

연산우선순위에서 거의 가장 높습니다.

num2 = ++num1;  // 전위 증가 연산자 , num1 += 1; 1증가 시켜서 누적(저장)시킵니다. 
System.out.println("num1:"+num1); // num1:8
System.out.println("num2:"+num2); // num2:8
		
num2 = num1++; // 후위 증가 연산자 , num1 += 1;  1증가 시켜서 누적(저장)시킵니다.
System.out.println("num1:"+num1); //num1:8 
System.out.println("num2:"+num2); //num2:7
	
num2 의 값이 다르다. why?


num3 = --num1;  // 전위 감소 연산자 , num1 -= 1; 1감소 시켜서 누적(저장)시킵니다.
System.out.println("num1:"+num1); // num1:7
System.out.println("num3:"+num3); // num3:7
		
num3 = num1--; // 후위 감소 연산자 , num1 -= 1; 1감소 시켜서 누적(저장)시킵니다.
System.out.println("num1:"+num1); // num1: 7
System.out.println("num3:"+num3); // num3: 8
		
num3 의 값이 다르다. why?

 

 

6) 비트연산자

 

(bit 단위로 계산해주는 연산자) = 결과는 논리 연산자와 같습니다.

(메모리에 저장할 수 있는 최소단위를 byte로 사용 하나의 byte8bit로 구성 : 0 or 1)

펌웨어 (부품들을 조작하는 것)에서 많이 사용합니다.

data분석에서는 많이 사용하지 x

 

- & : 비트단위로 AND 연산을 합니다. 3 & 5 = (00000011/ 00000101) 00000001 = 1

-  |  : 비트닽위로 OR 연산을 합니다.  3 | 5 = 7 (00000011/ 00000101) 00000111 = 7

- ^ : 비트타위로 XOR 연산을 합니다.

- ~ : 피연산자의 모든 비트를 반전시켜서 얻은 결과를 반환합니다.

 

 

7) 비트시트시프트연산자

 

펌웨어(부품들을 조작하는 것)에서 많이 사용합니다.

 

<< : 한 비트 옆으로 가라 (비트 이동만으로 곱하기 2한 값을 얻을 수 있다.)

000000001(1) -> 000000010 (2) -> 000000100 (4) -> 0000001000 (8)

 

>> : 한 비트 옆으로 가라 (비트 이동만으로 나누기 2한 값을 얻을 수 있다.)

0000001000 (8) -> 000000100 (4) -> 000000010 (2) -> 000000001(1)

 

>>> : 비트 열의 두 칸 오르쪽으로 이동시킨 결과 반환

 

 

★ 연산자 우선 순위

 

'빅데이터 > JAVA' 카테고리의 다른 글

[JAVA] 조건문(If , Switch)  (0) 2020.04.22
[JAVA] 자료형변환(Type Casting)  (0) 2020.04.22
[JAVA] 상수(literal)  (0) 2020.04.21
[JAVA] 변수(Variable)  (0) 2020.04.20
[JAVA] Java 기본 형태 및 기초  (0) 2020.04.20

+ Recent posts