안녕하세요 자바칩 프라푸치노입니다.
이론 포스팅으로 돌아왔네요!
지금부터는 연산자에 대해서 배워볼겁니다!
출발해보시죠!
( 본 포스팅은 모바일보다 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는 상수이므로 다른 값을 또 넣을 수 없습니다.
그러니까 대입연산자에서 피연산자는 상수가 아니어야 하겠네요!
오늘은 이렇게 연산자에 대해서 이론 공부를 해보았습니다.
수고하셨습니다 ㅎㅎ
'JAVA > java 이론' 카테고리의 다른 글
[자바JAVA]일차원 배열 , 배열의 길이, 배열의 선언방법, 배열 초기화, 배열 출력 (0) | 2020.09.26 |
---|---|
[자바JAVA] 반복문 for문, while문 , do while, continue, break (0) | 2020.09.22 |
[자바JAVA] 조건문과 난수 발생 Math.random() (0) | 2020.09.21 |
[자바JAVA] 변수2 - 변수의크기, 명명규칙, 문자열, 형변환, 오버플로우 (2) | 2020.09.01 |
[자바JAVA] 변수1 - 정의, data type, 종류 (1) | 2020.08.30 |