JAVA/java 이론

[자바 JAVA]연산자 - 연산자의 종류, 증감,부호,논리, 비트, 쉬프트, 비교, 삼항, 대입연산자

자바칩 프라푸치노 2020. 9. 14. 07:38

안녕하세요 자바칩 프라푸치노입니다.

이론 포스팅으로 돌아왔네요!

지금부터는 연산자에 대해서 배워볼겁니다!

출발해보시죠!

( 본 포스팅은 모바일보다 pc버전에서 가독성이 좋습니다 ^^)

 

1. 연산자란?(Operator)

연산자는 + - * / 이렇게 연산을 수행하는 기호이구요

피연산자는 연산자의 작업대상으로 , Operand라고 합니다.

a+b

이렇게 식이 있다면 +는 연산자, a와 b는 피연산자라고 할 수 있겠네요!

 

2. 연산자의 종류

 (1) 단항 연산자

- 피연산자가 한 개인 연산자를 말합니다.

- 증감연산자, 부호연산자, 논리부정 연산자, 비트전환연산자가 있습니다.

- ++ -- +- ! 입니다.

뒤에서 자세하게 알아봅시다.

 

 (2) 이항 연산자

- 피연산자가 두개인 연산자를 말합니다.

- 산술, 비교,논리, 비트 연산자가 있습니다.

뒤에서 더 자세하게 알아보겠습니다.

 

 (3) 삼항 연산자

- 피연산자가 3개인 연산자입니다.

- 이것도 뒤에서 더 자세하게 알아봅시다.

 

 (4) 대입 연산자

- = 을 말합니다.

- 오른쪽에서 왼쪽으로 대입이 됩니다.

 

3. 연산자의 우선순위 ++

연산자가 여러개 있을때 먼저 수행하는 우선순위가 있습니다.

일단 왼쪽에서 오른쪽으로 , 괄호 먼저 수행은 우리가 이미 수학에서 많이 배웠으므로 알고 있습니다.

그래도 확실하게 짚고 넘어가자면

단항>산술>비교>논리>삼항>대입

이 순으로 우선순위입니다.

 

 

4. 증감연산자

단항연산자에서 있었던 증감 연산자에 대해서 알아봅시다.

증가연산자 ++ 과 감소연산자 -- 가 있습니다.

이것은 피연산자의 앞에 올수도 있고 뒤에 올수도 있는데요,

앞에오면 전위, 뒤에오면 후위라고 합니다.

 

예를들어 int i  = 5; 

int j = 0;

이라고 해봅시다.

 

j = ++i;

이렇게하면 전위 증가 연산자라고 하고, 

세미콜론을 만나기 전에 미리 1을 증가시키는 것이죠.

그러면 i와 j가 6이되는 것입니다.

j = i++;

이렇게 하면 후위증가 연산자라고 하고,

세미콜론을 만난 후에 다음에 1을 증가시키는 것입니다.

그래서 앞에서 6이 되었던 값이 아직도 6으로 출력되고,

그 다음부터 7이 되겠죠!

이건 예제를 풀어보면 이해가 되실겁니다.

 

5. 부호연산자

단항연산자에 있었던 부호연산자입니다.

+ - 인데요, 이건 여러분들이 이미 너무 잘 알고 있습니다

-i 하면 i 에 -1을 곱하는 것이고 

+i 하면 i에 +1을 곱하는 것이죠.

 

6. 논리부정연산자

단항연산자에 있었던 논리부정연산자입니다.

! (not)이렇게 사용하고요, boolean타입에서만 사용할 수 있습니다.

true는 false로 바꾸고 false 는 true로 값을 바꿔줍니다.

예를 들어 boolean a = true; 

였는데 a = !a; 

하면 a가 true 에서 false로 바뀝니다.

 


7. 이항 연산자의 특징

이항 연산자는 산술을 하기전에 타입을 저절로 일치시키고 진행합니다.

int보다 크기가 작은 타입은 int로 통일 시키고,

int보다 큰 타입들은 피연산자 중에서 타입 크기가 가장 큰 타입으로 변환해서 수행합니다.

 

byte + short 를 하면 int + int 로 통일되어서 int로 출력이되고

char + int 하면 int + int 로 통일되어서 int로 출력이되고

float + int하면 float + float 로 통일되어서 float가 됩니다.

 

byte a =10;

byte b = 20;

byte c = a + b;//에러

에러뜨는 이유가 뭘까요?

a와 b는 byte이죠

그러면 int로 변환되어서 연산이 되겠네요!
그런데 c는 byte타입으로 받아주고 있죠.

그러면 타입이 맞지 않아서 에러가 뜨는군요!
그래서 에러가 뜨지 않게 되려면

byte c = (byte)(a+b);이렇게 강제 캐스팅을 해주면 되겠습니다.

 

 

8. 나머지 연산자

이항 연산자에서 +-/* 플러스, 마이너스 , 나누기, 곱하기는 다들 아실테고

나머지 연산자 % 이것이 있는데요 

이것은 나머지의 값을 나오게 하는 연산자입니다.

예를들어 10%2 하면 0이 나오겠죠. 10나누기2는 나머지가 0이니까요

이렇게 생각하시면 됩니다!

 

9. 쉬프트 연산자

이항 연산자에 있었던 산술연산자에 쉬프트연산자입니다.

<< 이거는 왼쪽으로 옮긴다 이런 말이니까 leftshift연산자이구요

>> 이것은 오른쪽으로 옮기니까 rightshift연산자입니다.

비트가 있을때 값을 오른쪽으로 옮기면 값이 작아지겠죠

그래서 x>>n 하면 x를 오른쪽으로 n칸 옮긴다 이런뜻이구요

값은 x/2의 n승입니다.

반대로 x<<n 하면 x를 왼쪽으로 n칸 옮긴다라는 뜻이구요

왼쪽으로 옮기면 값이 커지니까

x * 2의n승입니다.

 

쉬프트 연산자는 그래픽 분야에서 주로 사용한다고 해요

 

10. 비교연산자

비교연산자는 너무나 잘 알고 계시죠

> < >= <= == !=

이렇게 있네요 

이중에서 != 는 같지 않다 이런 뜻이구요 다른 것은 넘어가겠습니다.

 

참조형에서는 == 과 != 만 사용가능합니다.

참조형의 값은 주소인데, 501번지가 503번지보다 크고 작고 이런게 없잖아요

그래서 참조형에서는 같다 다르다만 사용할 수 있습니다.

 

값을 비교할때는 피연산자의 타입을 일치시킨 후에 비교합니다.

예를 들어서 '0'과 0을 비교한다면 char 형과 int형이니 int형으로 바꿔서 비교를 한다 이말입니다.

 

11. 비트연산자

피연산자를 비트단위로 연산을 합니다.

비트 or연산자 | : 둘 중하나가 1이면 1이다.

비트 and연산자 & : 둘다 1이면 1이다.

비트 xor연산자 ^ : 두개가 다르면 1이다.

이렇게 있구요

계산하는 법은

요렇게 되겠습니다.

 

12. 논리연산자 || &&

논리연산자는 조건식과 조건식을 비교하구요 그 값이 boolean이어야합니다.

||는 or연산자로 둘 중 하나가 참이면 참이고 

&&는 and연산자로 둘다 참이어야 참입니다.

&&이 ||보다 우선순위가 높습니다.

어떻게 사용하냐면

(n==1 || n>10) 이렇게 쓴다면 어떻게 생각을 하느냐!

n이 1이거나 n이 10보다 크면~ 

이라고 생각하는 것입니다. 

둘중에 하나가 true면 저 값을 true가 되겠네요

 

13. 삼항연산자

삼항연산자는 (조건식)?: 식1: 식2

이렇게 사용을 하구요

조건식 안의 값이 true면 식1을 수행하고

false면 식2를 수행합니다.

 

int score = 50;

char grade = (score>= 90)? : 'A' : ((score >= 80) ?: 'B' : 'C');

이렇게 있었다고 생각해봅시다.  뭐가 나올까요?

자 먼저 괄호가 우선순위 최고봉이니까 괄호부터 봅시다.

score는 50이네요

score는 80보다 크거나 같다가 맞지 않죠. 그러면 false니까 c를 출력하겠네요.

그럼 전체 식이 

(score >= 90)? : 'A':'C';

이렇게 됩니다.

그런데 score는 90보다 크거나 같다도 false이죠. 그래서 결국 c가 출력이 됩니다.

 

14. 대입연산자

대입연산자는 오른쪽에서 왼쪽으로 대입됩니다.

int i = 0;

i = i+3;

이렇게 되어있다면 i+3을 한다음에 i에 대입을 한다는 뜻이겠네요.

 

final int MAX = 3;

MAX = 5; 

이렇게 될까요?

final int MAX는 상수이므로 다른 값을 또 넣을 수 없습니다.

그러니까 대입연산자에서 피연산자는 상수가 아니어야 하겠네요!

오늘은 이렇게 연산자에 대해서 이론 공부를 해보았습니다. 

수고하셨습니다 ㅎㅎ

728x90