[JAVA] 연산자(Operation) (3일차)
<오늘의 학습>
1. 대입 연산자
2. 부호 연산자
3. 산술 연산자
4. 증감 연산자
5. 관계 연산자
6. 논리 연산자
7. 복합 대입 연산자
8. 조건 연산자
9. Shift 연산자
10. 연산자 우선 순위
11. 문자열 비교 연산자
12. 객체 비교 연산자
항과 연산자(Operation)
단항 연산자 | 항이 한 개인 연산자 | ++num |
이항 연산자 | 항이 두 개인 연산자 | num1 + num2; |
삼항 연산자 | 항이 세 개인 연산자 | ( 5> 3) ? 1 : 0; |
1. 대입 연산자
▶ 변수에 값을 대입하는 연산자
int age = 27; //age 변수에 값 27을 대입
int sum = aScore + bScore; // aScore 값과 bScore 값을 더하여 sum 변수에 대입
2. 부호 연산자
▶ 더하기, 빼기 연산에 쓰는 이항 연산자. 부호(양수,음수)를 나타내는 단항 연산자로도 사용한다.
연산자 | 기능 | 연산 |
+ | 변수나 상수의 값을 양수로 만든다. | +2 |
- | 변수나 상수의 값을 음수로 만든다. | -2 |
3. 산술 연산자
▶ 사칙 연산에서 사용하는 연산자
연산자 | 기능 | 연산 |
+ | 두 항을 더한다. | 5+3 => 8 |
- | 앞에 있는 값에서 뒤에 있는 값을 뺀다. | 5-3 => 2 |
* | 두 값을 곱한다. | 5*3 => 15 |
/ | 앞에 있는 값에서 뒤에 있는 값을 나누어 몫을 구한다. | 5/3 => 1 |
% | 앞에 있는 값에서 뒤에 있는 값을 나누어 나머지를 구한다. | 5%3 =>2 |
▶ 실수/정수=실수(자료형이 큰 쪽으로 자동형변환)
ex) 10.0/2=5.0
▶ 몫과 나머지를 이용한 게시판 page 계산
- 37/10=3 => 3+1page //페이지 갯수 4
- 37%10=7 => 마지막 페이지는 7개 출력
int pageCount=(37/10)+(((37%10)==0)?0:1);
System.out.println("페이지 수:"+pageCount);//페이지 수:4
4. 증감 연산자
▶ 단항 연산자로, 연산자 앞이나 뒤에 사용하며 값을 1만큼 늘리거나 1만큼 줄인다. 어디에 연산자가 위치하느냐에 따라 값이 바뀌니 주의한다.
연산자 | 기능 | 연산 |
++ | 항의 값에 1을 더한다. | ++num;//먼저 num값이 증가한 후 대입 |
num++;//num값을 대입한 후 num값 증가 | ||
-- | 항의 값에 1을 뺀다. | --num;//먼저 num값이 감소한 후 대입 |
num--;//num값을 대입한 후 num값 감소 |
▶ 증감연산자 계산
int a=5;
int b=5;
int x = ++a + b--; //6+5 값 대입
System.out.println(x); //11 출력
int a=5;
int b = ++a + ++a;
System.out.println(b); //13 출력
- C언어에서는 14로 계산되고, 자바에서는 13으로 계산된다.
5. 관계 연산자
▶ 항이 두 개인 이항 연산자로, 두 개의 항을 비교한다. 관계 연산자의 결과 값은 참(true) 또는 거짓(false)으로 반환된다.
연산자 | 기능 (왼쪽을 기준으로 비교) | 연산 |
> | 왼쪽 항이 크면 참, 아니면 거짓을 반환한다.(초과) | num > 5; |
< | 왼쪽 항이 작으면 참, 아니면 거짓을 반환한다. (미만) | num < 5; |
>= | 왼쪽 항이 크거나 같으면 참, 아니면 거짓을 반환한다. (이상) | num >= 5; |
<= | 왼쪽 항이 작거나 같으면 참, 아니면 거짓을 반환한다. (이하) | num <= 5; |
== | 두 항의 값이 같으면 참, 아니면 거짓을 반환한다. | num == 5; |
!= | 두 항의 값이 다르면 참, 아니면 거짓을 반환한다. | num != 5; |
6. 논리 연산자
▶ 참과 거짓의 논리 연산을 프로그래밍 언어로 구현한 연산자
1) 일반 논리 연산자
연산자 | 기능 | 연산 |
&& (논리 곱. AND) | 두 항이 모두 참인 경우에만 결과 값이 참이다. 그렇지 않은 경우는 모두 거짓이다. | boolean val = (5>3) && (5>2); => true |
|| (논리 합. OR) | 두 항 중 하나의 항만 참이어도 결과 값이 참이다. 두 항이 모두 거짓일 경우에만 결과 값은 거짓이다. | boolean val = (5>3) || (5<2); => true |
! (부정. NOT) | 참인 경우는 거짓으로 바꾸고, 거짓인 경우에는 참으로 바꾼다. 단항 연산자이다. | boolean val = !(5>3); =>false |
2) bit(이진) 논리 연산자
연산자 | 기능 | 연산 |
& (AND) | 두 개의 비트 값이 모두 1인 경우에만 연산의 결과 값이 1이 된다. | 00000101 & 00000010 => 00000000 |
| (OR) | 두 개의 비트 중값이 하나라도 1인 경우에 연산의 결과 값이 1이 된다. | 00000101 | 00000010 => 00000111 |
^ (XOR) | 같은 값이면 0, 다른 값이면 1의 값을 가진다. | 00000101 ^ 00000010 => 00000111 |
~ (NOT) | 비트 값 0은 1으로, 1은 0으로 바꾼다. | ~00000101 => 11111010 |
7. 복합 대입 연산자
▶ 대입 연산자와 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자
연산자 | 기능 | 연산 |
+= | 두 항의 값을 더해 왼쪽 항에 대입한다. | sum+=i; sum = sum + i; |
-= | 왼쪽 항에서 오른쪽 항을 뺀 값을 왼쪽 값에 대입한다. | num -= 2; num = num - 2; |
*= | 두 항의 값을 곱해 왼쪽 항에 대입한다. | num *= 2; |
/= | 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입한다. | num /= 2; |
%= | 왼쪽 항을 오른쪽 항으로 나눈 값의 나머지를 왼쪽 항에 대입한다. | num %= 2; |
<<= | 비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입한다. | num <<= 2; |
>>= | 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입한다. 왼쪽에 채워지는 비트 값은 부호 비트와 동일하다. |
num >>= 2; |
>>>= | 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입한다. 왼쪽에 채워지는 비트 값은 0이다. |
num >>>= 2; |
&= | 두 항의 & 비트 연산 후 값을 왼쪽 항에 대입한다. | num &= 2; |
|= | 두 항의 | 비트 연산 후 값을 왼쪽 항에 대입한다. | num |= 2; |
^= | 두 항의 ^ 비트 연산 후 값을 왼쪽 항에 대입한다. | num ^= 2; |
8. 조건 연산자
▶ 연산에 필요한 항의 개수가 세 개인 삼항 연산자로, 주어진 조건식이 참인 경우와 거짓인 경우에 따라 다른 결과 값이 나온다.
연산자 | 기능 | 연산 |
조건식 ? 결과1 : 결과 2; | 조건식이 참이면 결과 1, 조건식이 거짓이면 결과2가 선택된다. |
int num = (a>b) ? a : b; |
9. Shift 연산자
연산자 | 공식 | 기능 | 연산 |
<< | X*2ⁿ | 왼쪽으로 비트를 이동한다. 오른쪽은 0으로 채운다. | 00000101<<2 => 00010100 |
>> | X*2ⁿ | 오른쪽으로 비트를 이동한다. 왼쪽은 0으로 채운다. | 00010100>>2 => 00000101 |
>>> | X/4ⁿ | 비트를 오른쪽으로 이동한다. 왼쪽에 채워지는 비트 값이 부호 비트와 상관없이 무조건 0이 된다. | 00000001>>>2 => 00000001 |
▶ 부호 비트(sign bit)
- 최좌측 bit
- 0이면 양수, 1이면 음수
ex) 0000 0001 ->양수
1000 0001 ->음수 (-1을 표기한 것은 아님)
10. 연산자 우선 순위
우선순위 | 형 | 연산자 | 연산 방향 |
1 | 단항 | 증감(++, --), 부호(+, -), 논리(!) | ← |
2 | 산술 | 산술 (*, /, %) | → |
3 | 산술 | 산술 (+, -) | → |
4 | 비트 이동 | Shift (<<, >>) | → |
5 | 관계 | 비교 (<, >, <=, >=, instanceof) | → |
6 | 관계 | 비교 (==, !=) | → |
7 | 비트 곱 | 논리 (&) | → |
8 | 비트 차 | 논리 (^) | → |
9 | 비트 합 | 논리 (|) | → |
10 | 논리 곱 | 논리 (&&) | → |
11 | 논리 합 | 논리 (||) | → |
12 | 조건 | 조건 (? :) | → |
13 | 대입 | 대입(=, +=, -=, *=, /=, %=) | ← |
11. 문자열 비교 연산자
- equals()메소드:문자열을 비교할 때 사용(대,소문자 구분)
ex) yes != YES != Yes - equalsIgnoreCase():문자열비교(대문자,소문자 구분없이 비교)
ex) yes == YES == Yes
/*문자열 비교*/
String str1="hi", str2="hi", str3="HI";
System.out.println(str1.equals(str2));//true
System.out.println(str1.equals(str3));//false
System.out.println(str1.equalsIgnoreCase(str3));//true
12. 객체 비교 연산자 (instanceof)
- 객체 instanceof 클래스
- 왼쪽 instanceof 오른쪽
/*객체 instanceof 클래스*/
String str = new String("aaa");
Object ob=new Object();
//왼쪽 객체보다 오른쪽 클래스가 같거나 위일 때 => true
System.out.println(str instanceof String);//true
System.out.println(ob instanceof Object);//true
System.out.println(str instanceof Object);//true
System.out.println(ob instanceof String);//false
- Object는 자바의 최상위 클래스이다. 클래스를 만들 때 상속을 받지 않아도 내부적으로 Object가 상속받아진다.
2023년 5월 16일 화요일
<3일차 수업 후기>
증감 연산자 계산을 많이 공부했다고 생각했는데, [ ++a + ++a ]의 값을 14라고 생각했다. C언어에서는 14로 계산되고, 자바에서는 13으로 계산된다고 하니 차이를 알아두면 좋을 것 같다.
또한 클래스를 만들 때 상속을 받지 않아도 Object가 상속받아지는지 몰랐다. Object가 자바의 최상위 클래스라는 것을 꼭 기억하자.