[Java] 5.연산자(Operator)
자바의 연산자
자바의 연산자(Operator)
자바에는 다양한 연산자가 있다. 아래의 표를 참조하자
연산자 종류 | 포함되는 연산자들 |
---|---|
단항연산자 | ++ , – , + , - , ~ , ! ,(cast) |
산술연산자 | / , * , % , + , - |
시프트연산자 | > > , > > > , < < |
비교연산자 | < , > , <= , >= , == , != , instance of |
논리연산자 | & , | , && , || , ^ |
삼항연산자 | ?: |
대입연산자 | = , *= , /= , %= , += , -= , «= , »= , »>= , &= , ^= , |= |
- 단항연산자가 제일 우선순위가 높고 대입연산자가 우선순위가 가장낮다.
- 우선순위가 낮다는것은 가장 뒤에 실행 된다는 뜻이다.
- 단항연산자의 +,- 와 산술연산자의 +,- 는 다르다. (단항은 부호를 나타내고, 산술은 더하기빼기이다.)
아래에는 각 연산자중에 자주 쓰인다고 생각하는것들에 대한 간단한 설명을 써 보도록 하겠다.
1. 단항연산자
한개의 변수에 대해 적용되는 연산자이다.
++, –
증가 감소 연산자로, 하나의 값을 1만큼 내리거나 올릴 때 사용한다.
이 연산자를 사용할 때 주의할 점이 있는데 바로 이 연산자의 위치이다.
int a=1 라는 변수가 있을 때 , ++a 를 한다면, a 값에 먼저 1을 더하고 a에 대입하고 a++을 하면 a값은 그대로 있고 , 해당 행이 끝날 때 a에 1을 더한다.
쉽게 말하자면,
system.out.print(++a); = > 2
system.out.print(a++); => 1 이 되는것이다 . (더해지지 않은것이아니다 print 되고나서 더해진다.)
!
논리 부정 연산자로 boolean형에만 사용할 수 있다. 해당 boolean값을 반전시킨다.
boolean a=true;
system.out.println(!a);
// 결과 false
2. 산술연산자
기본적으로 계산에 관련된 연산자이다.
%,/
둘다 나눗셈에 관련된 연산자이다. %는 나누고 남은 나머지를 , / 는 몫을 결과값으로 돌려준다.
예를들면,
int a=5;
int b=3;
system.out.println(a/b); => 1
system.out.println(a%b); => 2
3. 비교연산자
앞과 뒤의 변수가 같은지 큰지 ,작은지를
비교
하는 연산자이다.
!=
뒤의 변수가 앞의 변수와 같은지를 판별하는 연산자이다.
예를들면,
int a=5;
int b=3;
system.out.println(a!=b); // => false
4. 논리연산자
앞 항과 뒷 항의 논리적인 연산이 필요할 때 사용한다.
& , | , ^ , && , ||
비슷해 보이지만 다르다
앞의 & , , ^ 이 세가지는 이진논리 연산자로, float과 double을 제외한 모든 기본형에 사용가능하다. - && 는 전항과 후항이 모두 참이될 때 참이 되는 논리곱이라고한다.
는 전항과 후항중 하나만 참이라도 참이되는 논리합 이라고 한다.
int a=1;
int b=2;
//논리곱
if(a==1 && b==2){
system.out.println("둘다 맞아요"); // 둘다 맞으니까 출력된다.
}
//논리합
if(a==1 || b==3){
system.out.println("둘중에 하나는 맞아요"); //둘중에 하나라도 맞으면 출력된다.
}
논리 연산자에서 모든 항이 실행되지 않는경우
int a=1;
int b=2;
//
if((a=a+1)<0 && (b=b+1)>0){ // 논리곱 연산 결과 거짓
system.out.println("이 문장은 실행되지 않아요");
}
system.out.println("a="+a);
system.out.println("b="+b);
/*
결과
a=2
b=2
*/
- 왜 이런결과가 나오는걸까?
java 가 이 조건문을 실행할 때 a=a+1 을 실행해서 결과가 0보다 작은지 비교하고 , 논리연산자를 기준으로 앞의 항이 0보다 크기때문에 논리곱은 false가 나오게 된다 . false가 나오는 순간에, 이 조건문 실행을 건너 뛰고 다음으로 넘어가기 때문에 , a의 값은 논리연산자의 비교를 위해 더해진채로 남게 되는것이고, 조건문안의 b에대한 연산은 이루어지지 않았기 때문에, 값이 그대로 남아있게 된다. 이를
Short-Circuit Logic
단락회로 평가 라고한다.따라서 논리연산자를 사용하여 비교하는 구문에 수식을 사용해서 변수값을 바꿀경우에 주의가 필요하다.
5. 삼항연산자
말그대로 연산을 하기위해서 3개의 항이 필요한 연산자이다.
? :
조건식 ? 참일때의 결과 : 거짓일 때의 결과; 의 방식으로 사용한다.
//삼항 연산자의 사용 int num=(5>3)?10:20; System.out.println(num); //결과 10
6. 대입연산자
모든 연산자중에서 가장 우선순위가 낮다. 생각해 보면 당연한것이, 다른 연산이 다 되고나서 대입이 되어야 연산을 하는 의미가 있을텐데 그 전에 대입되면 무슨 소용이 있겠는가..
*= , /= , %= , += …….
프로그래밍에서 대입이란, 우측의 항을 좌측에 넣는것을 말한다. 가령 a=b 라고 한다면 , b 를 a 에 대입하는것이 되는것이다. 우리가 익히 알고있던 = 의 “같다” 라는 의미와는 다르다는것을 꼭 인지해야한다.
위의 연산자들은 대입한다는 의미에 더해서 간단한 연산을 하고 대입할 수 있는것들인데 몇 개 살펴보자.
int a = 1;
int b = 2;
a*=b // a와 b를 곱해서 그것을 다시 a에 대입하겠다.
a/=b // a와 b를 나눈 몫을 a에 저장하겠다.
a%=b // a와 b를 나눈 나머지를 a에 저장하겠다.
연사자는 여기까지 하고 다음 포스팅에서는 , String 이라는 자료형에 대해서 조금 자세하게 알아보자.