6. 관계 연산자
관계 연산자는 일상의 수학에서 부등호 역할을 한다고 볼 수 있습니다. 왼쪽과 오른쪽의 대소를 구분하여 참과 거짓을 반환하는 형태입니다. 결과값은 true 혹은 false로 나타내기 때문에 논리형에서 사용할 수 있습니다. 관계 연산자는 비교 관계 연산자와 항등 관계 연산자로 구분할 수 있습니다.
1] 비교 관계 연산자 ( <, >, <=, >= )
비교 관계 연산자는 초과, 이상, 미만, 이하를 나타내는데 사용합니다.
- int a = 10;
int b = 11;
boolean bool = a < b; // bool의 값은 true
2] 항등 관계 연산자 ( ==, != )
항등 관계 연산자는 왼쪽과 오른쪽의 두 값이 같은지 아닌지를 판단할 때 사용합니다. '=='은 두 값이 같다는 의미이고 '!='은 두 값이 다르다는 의미입니다. 각 연산자의 결과값은 참이면 true를, 거짓이면 false를 반환합니다.
- int a = 10;
int b = 11;
boolean bool = a == b; // bool의 값은 false
7. 비트 연산자
비트 연산자는 앞서 설명했던 쉬프트 연산자와는 약간의 차이점이 있습니다. 쉬프트 연산자의 경우에는 비트로 변환 후 일정 값 만큼 이동시키지만 비트 연산자는 비트로 변환 후 서로 일치하는 비트의 수를 계산하는 연산자입니다.
1] AND 연산자 ( & )
이 AND 연산자는 두 피연산자의 비트 값이 모두 1일 때 결과값을 1로 반환하고 나머지는 0으로 반환합니다.
- int a = 3;
int b = 5;
int c = a & b;
0000 0000 0000 0000 0000 0000 0000 0011 // 10진수 3
0000 0000 0000 0000 0000 0000 0000 0101 // 10진수 5
-------------------------------------------------- AND 연산
0000 0000 0000 0000 0000 0000 0000 0001 // 10진수 1
2] Exclusive OR 연산자 ( ^ )
이 연산자는 & 연산자와 반대로 두 피연산자의 비트 값이 서로 다를 때 1을 반환하고 같으면 0을 반환합니다.
- int a = 3;
int b = 5;
int c = a & b;
0000 0000 0000 0000 0000 0000 0000 0011 // 10진수 3
0000 0000 0000 0000 0000 0000 0000 0101 // 10진수 5
-------------------------------------------------- ^ 연산
0000 0000 0000 0000 0000 0000 0000 0110 // 10진수로 6
3] OR 연산자 ( | ) ※ 보통 엔터 키 위의 역슬래쉬를 Shift 키와 같이 누르면 나오는 기호
이 연산자는 두 피연산자의 비트 값이 모두 0이면 0을 반환하고 하나라도 1이면 1을 반환합니다.
- int a = 3;
int b = 5;
int c = a & b;
0000 0000 0000 0000 0000 0000 0000 0011 // 10진수 3
0000 0000 0000 0000 0000 0000 0000 0101 // 10진수 5
-------------------------------------------------- ^ 연산
0000 0000 0000 0000 0000 0000 0000 0111 // 10진수로 7
8. 논리 연산자
논리 연산자는 앞에서 나왔던 것도 몇가지 있습니다. 서로 비슷하게 생긴 모양들도 있지만 각자의 역할이 다르므로 주의가 필요합니다.
1] &와 &&연산자
위 연산자들은 두 피연산자 모두 true값을 가지면 결과가 true가 됩니다. 하지만 실행에 있어서는 약간의 차이가 있습니다. &&는 &와 그 역할은 비슷하지만 두 피연산자의 값을 모두 비교하지 않는다는 다른 점이 있습니다. 아래의 예시를 보도록 하겠습니다.
- int a = 10;
int b = 20;
boolean bool = ++x > y && x < ++y;
위의 코드를 실행해보면 bool에는 false 값이 들어가는 것을 확인할 수 있습니다. 하지만 y의 값은 그대로 20인 것을 알 수 있습니다. 이는 && 연산이후 x < ++y 부분에서 y에 증감 연산자가 작동하지 않았다는 뜻이 됩니다. 이를 통해 알 수 있는 것은 && 연산자는 두 피연산자를 모두 비교하는 것이 아닌 앞에서 false라고 판단이 되면 뒤의 연산은 자동으로 수행하지 않는다는 것을 알 수 있습니다.
2] |와 ||연산자
위 연산자들은 아까와는 반대로 두 피연산자 모두 false의 값을 가지면 false값을 출력하게 됩니다. ||연산자 또한 |와 같은 역할을 하지만 앞쪽 피연산자의 연산만으로 전체 결과의 판단이 가능하다고 판단되면 뒤의 연산은 수행하지 않습니다. 아래의 코드를 보도록 하겠습니다.
우선 |연산자부터 살펴보도록 하겠습니다.
public class Round05_Ex05 {
public static boolean aaa() {
System.out.println("AAA");
return true;
}
public static boolean bbb() {
System.out.println("BBB");
return false;
}
public static void main(String[] args) {
boolean b = aaa()|bbb();
System.out.println("b = "+b);
}
}
위의 코드를 실행하면 aaa함수와 bbb함수가 모두 실행되어 'AAA', 'BBB' 모두 출력되고 이후에 true라는 값이 출력되는 것을 알 수 있습니다. 이번에는 반대로 아래의 코드를 살펴보도록 하겠습니다.
public class Round05_Ex04 {
public static boolean aaa() {
System.out.println("AAA");
return true;
}
public static boolean bbb() {
System.out.println("BBB");
return false;
}
public static void main(String[] args) {
boolean b = aaa()||bbb();
System.out.println("b = "+b);
}
}
위의 코드는 아까와는 반대로 'AAA'만 출력되고 true라는 값이 출력되는 것을 확인할 수 있습니다.
9. 삼항 연산자
삼항 연산자는 3개의 항으로 이루어져 있기 때문에 붙여진 이름입니다. 구조는 아래와 같습니다.
- 조건항 ? 항1 : 항2
삼항 연산자는 조건항에서 연산을 수행 후 참이라면 항1의 연산을, 거짓이라면 항2의 연산을 수행하게 됩니다. 아래의 예시를 보도록 하겠습니다.
- int a = 10;
int b = 20;
int c = a < b ? a : b;
위의 코드의 결과는 a가 b보다 작기 때문에 c 변수에는 a의 값이 들어가게 됩니다. 하지만 C언어와 비슷하기 때문에 쉽게 발생하는 오류가 있습니다. 만약 아래와 같이 코딩을 하게 된다면 오류가 발생할 것입니다.
- int a = 10;
a == 10? System.out.println("참") : System.out.println("거짓");
자바에서는 이러한 문법을 허용하지 않기 때문에 아래와 같이 고쳐주어야 합니다.
- int a = 10;
System.out.println(a == 10 ? "참" : "거짓");
이처럼 동일한 문장을 반복하는 것이 아닌 하나의 문장 안에 전달할 매게변수에서 연산을 수행하여야 합니다.
10. 배정 대입 연산자
배정 대입 연산자는 대입 연산자와 다른 연산자들을 결합한 형태라고 볼 수 있습니다. 때문에 두 가지 연산자의 역할을 모두 수행합니다. 아래의 예시를 보도록 하겠습니다.
- int a = 10;
int b = 0;
int b = a -= ++b;
위의 코드는 변수 b에 a에서 b에 1을 더한 값을 빼고 저장하라는 의미가 됩니다. 이를 자세하게 풀어쓰면 아래와 같이 나타낼 수 있습니다.
- int b = ( a = a - (++b)); // 연산 결과는 a=9, b=9
'프로그래밍 > JAVA' 카테고리의 다른 글
제어문 - 1 ( if, switch-case-break ) (0) | 2019.04.17 |
---|---|
자바 연산자 - 문제 (0) | 2019.04.16 |
자바 연산자 - 1 (0) | 2019.04.14 |
자바 기본 입출력 - 문제 (0) | 2019.04.11 |
자바 기본 입출력 (0) | 2019.04.10 |