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 (단항을 가짐)
연산결과는 A가 True 이면 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로 사용 – 하나의 byte는 8개bit로 구성 : 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 |