티스토리 뷰
📌 비교 연산자
피연산자 두 개를 비교하는 데 사용되는 연산자이다. 제어문의 조건식에 사용되며 연산 결과는 오직 true와 false 중 하나이다.
1. 대소 비교 연산자
비교 연산자 | 설명 |
> | 좌항의 값이 크면 true, 아니면 false 반환 |
< | 우항의 값이 크면 true, 아니면 false 반환 |
>= | 좌항의 값이 크거나 같으면 true, 아니면 false 반환 |
<= | 우항의 값이 크거나 같으면 true, 아니면 false 반환 |
✔ 논리형이나 참조형을 제외한 자료형에 사용할 수 있다.
2. 등가 비교 연산자
비교 연산자 | 설명 |
== | 두 값이 같으면 true, 아니면 false를 반환 |
!= | 두 값이 다르면 true, 아니면 false를 반환 |
✔ 논리형이나 참조형을 제외한 자료형에 사용할 수 있다.
✔ 단, 문자열은 등가 비교 연산자를 사용해서 비교할 수 없다.
public class Main {
public static void main(String args[]) {
String str1 = "hello";
String str2 = "hello";
System.out.println("> str1==str2 비교 결과");
System.out.println("str1과 str1은 같다 : "+(str1==str2));
String str3 = "hello";
String str4 = new String("hello");
System.out.println("\n> str3==str4 비교 결과");
System.out.println("str3과 str4는 같다 : "+(str3==str4));
String str5 = "hello";
String str6 = new String("hello");
System.out.println("\n> str5.equals(str6) 비교 결과");
System.out.println("str5과 str6은 같다 : "+(str5.equals(str6)));
}
}
✔ 문자열이 완전히 같은지 비교할 뿐이므로, 문자열의 내용이 같은 지 비교하기 위해서는 equals()를 사용하자.
✔ 그리고 내용이 같더라도 서로 다른 객체라면 false를 반환하니 주의하자.
📌 논리 연산자
논리 연산자는 둘 이상의 조건을 '그리고(AND)', '또는(OR)'으로 연결하여 하나의 식으로 표현할 수 있게 해 준다.
1. 논리 연산자
✔ || (OR결합) : 피연산자 중 어느 한쪽만 true 이면 true를 결과를 얻는다.
✔ && (AND결합) : 피연산자 양 쪽 모두 true이어야 true를 결과로 얻는다.
✔ ! (논리 부정) : 피연산자가 true면 false를, false면 true를 반환한다.
2. 비트 연산자
비트 연산자 | ||
& | 비트 AND | 피연산자 의 값이 모두 1이면 1을 반환 |
| | 비트 OR | 피연산자 중 한 쪽의 값이 1이면 1을 반환 |
^ | 비트 XOR | 피연산자 중 값이 서로 다를 때 1을 반환 |
~ | 비트 NOT | 피연산자를 0은 1로, 1은 0으로 변경하여 반환 |
<< | 비트를 왼쪽으로 한 칸 이동 | 좌항 * 2^우항 의 결과를 반환 (2진수 기준) |
>> | 비트를 오른쪽으로 한 칸 이동 | 좌항 / 2^우항 의 결과를 반환 (2진수 기준) |
✔ 비트 연산자는 피연산자를 2진수로 표현한 값을 기준으로 연산한다.
✔ 피연산자로 실수는 허용하지 않으며, 정수나 문자만 사용할 수 있다.
2-1. 비트 연산자 AND, OR, XOR
public static void main(String args[]) {
int num1 = 1; //0000 0001
int num2 = 3; //0000 0011
// 0000 0001
// 0000 0011
//AND연산 0000 0001 = 1
System.out.println("num1 & num2="+(num1 & num2));
// 0000 0001
// 0000 0011
//OR 연산 0000 0011 = 3
System.out.println("num1 | num2="+(num1 | num2));
// 0000 0001
// 0000 0011
//XOR연산 0000 0010 = 2
System.out.println("num1 ^ num2="+(num1 ^ num2));
}
2-2. 비트 연산자 NOT
✔ 비트 연산자 NOT은 단항 연산자.
public static void main(String args[]) {
int num1 = 1; //0000 0001
int num2 = 3; //0000 0011
// 0000 0001
//XOR연산 1111 1110 = -2
// 맨 앞의 기호 비트가 1이므로 XOR 연산 결과는 음수. (1이라면 음수, 0이면 양수를 의미)
// 해당 값의 음수를 찾기위해서는 먼저 1의 보수를 구하고
// 추가로 마지막 자리에 +1 해주어 2의 보수를 만들어 값을 유추할 수 있다.
// 1111 1110 의 1의 보수는(1의 보수는 두 값을 더했을때 1이 되는 값)
// 0000 0001 인데, 여기서 1을 더해야 2의 보수가 되므로
// 0000 0010 이 결국 1111 1110의 양수값.
// 즉 2가 1111 1110의 2의 보수이므로, 결과는 -2를 반환
System.out.println("~num1="+(~num1));
}
2-3. 비트 연산자 << >>
✔ 10진수 기준으로 비트 연산자 << 는 2배, 비트 연산자 >> 는 1/2배의 연산 수행
✔ 2진수 기준으로 비트 연산자 << 는 2^n배, 비트 연산자 >> 는 1/2^n배의 연산 수행
public static void main(String args[]) {
int num1 = 3; //0000 0011
int num2 = 4; //0000 0100
// 0000 0011
// << 왼쪽으로 한 칸씩 이동
// 0000 0110
// = 6 반환
System.out.println(" num1\t\t"+num1);
System.out.println(" num1 << 1\t"+(num1<<1)+"\n");
// 0000 0011
// << 왼쪽으로 두 칸씩 이동
// 0000 1100
// = 12 반환
System.out.println(" num1\t\t"+num1);
System.out.println(" num1 << 2\t"+(num1<<2)+"\n");
// 0000 0100
// >> 오른쪽으로 한 칸씩 이동
// 0000 0010
// = 2 반환
System.out.println(" num2\t\t"+num2);
System.out.println(" num2 >> 1\t"+(num2>>1)+"\n");
}
[참고] 자바의 정석
'BackEnd > JAVA' 카테고리의 다른 글
[Ch.04] 조건문과 반복문 (0) | 2021.03.05 |
---|---|
[Ch.03] 5. 기타 연산자 (0) | 2021.02.28 |
[Ch.03] 3. 산술 연산자 (0) | 2021.02.28 |
[Ch.03] 2. 단항 연산자 (0) | 2021.02.28 |
[Ch.03] 1. 연산자 (0) | 2021.02.28 |
댓글