| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 자바 #java
- BFS
- css #웹 #생활코딩
- 파이썬
- 투포인터
- 백준
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- css #생활코딩 #웹
- 재귀
- 백트랙킹
- 다익스트라
- PYTHON
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- java #자바
- 파이썬 #백준 #알고리즘 #코딩테스트
- 프로그래머스
- 백준 #알고리즘 #파이썬 #코딩테스트
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- 농구
- 코딩테스트
- Dijkstra
- DFS
- java #자바 #생활코딩
- react #리액트 #동빈나 #나동빈 #유튜브강의
- 백준 #파이썬 #알고리즘 #코딩테스트
- 다이나믹프로그래밍
- 알고리즘
- dp
- java #자바 #나동빈
- java #자바 #동빈나
Archives
- Today
- Total
커리까지
[백기선] 3주차 과제: 연산자 본문
728x90
SMALL
산술 연산자
산술 연산자 종류
| 구분 | 연산자 | 의미 |
|---|---|---|
| 산술연산자 | + | 더하기 |
| - | 빼기 | |
| * | 곱하기 | |
| / | 나누기 | |
| % | 나머지 값 구하기 |
비트 연산자
데이터를 비트 단위로 연산
- 0과 1로 표현이 가능한 정수 타입이나 정수형으로 캐스팅이 가능한 자료형만 비트 연산 가능
비트 연산자 종류
| 연산식 | 설명 | 예시 |
|---|---|---|
| x<<y | 정수 x의 각 비트를 y만큼 왼쪽으로 이동시킨다.(빈자리는 0으로 채워진다.) | |
| x >> y | 정수 x의 각 비트를 y만큼 오른쪽이로 이동시킨다.(빈자리는 정수 a의 최상위 부호 비트와 같은 값으로 채워진다.) | |
| x >>> y | 정수 x의 각 비트를 y만큼 오른쪽으로 이동시킨다.(빈자리는 0으로 채워진다.) | |
| ~ | 비트의 반전(1의 보수) | a = ~a |
| & | 비트 단위 AND | 1 & 1 1반환 그 외는 0 |
| | | 비트 단위 OR | 0|0 0반환 그 외는 1 |
| ^ | 비트 단위 XOR | 두개의 비트가 서로 다른 경우에 1을 반환 |
예시
2 << 3
00000000 00000000 00000000 00000010 2vvv vvv
000 00000000 00000000 00000000 000010??? 16- 2를 32비트로 분해한 다음 밑에처럼 왼쪽으로 3비트를 이동시키면 왼쪽 3비트는 밀려서 버려지게 되고 맨 오른쪽은 0으로 채워진다.
- 그래서 16이 된다.
-16 >> 3
vvv
11111111 11111111 11111111 11110000 -16vvv
11111111 11111111 11111111 11111110 -2- 16비트를 32로 분해한 다음 오른쪽으로 3비트 이동시킨다.
- 맨 오른쪽 3비트는 밀려서 버려지게되고 맨 왼쪽은 최상위 부호비트와 동일한 값으로 채워진다.
-16 >>>3
vvv
11111111 11111111 11111111 11110000 -16vvv
00011111 11111111 11111111 11111110 536870910- 오직 자바에만 있는 연산이고 >>와 원리는 같다.
- 오른쪽 3비트로 이동하면 오른쪽 3비트는 버려지게 되고 맨 왼쪽은 0으로 채워진다.
- 0으로 채워지기 때문에 결과는 무조건 양수가 된다.
관계 연산자
관계 연산자 종류
| 연산자 | 기능 | 연산 예 |
|---|---|---|
| > | 왼쪽 항이 크면 참을, 아니면 거짓을 반환한다. | num > 3; |
| < | 왼쪽 항이 작으면 참, 아니면 거짓을 반환한다. | num < 3; |
| >= | 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓을 반환한다. | num >= 3; |
| <= | 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓을 반환한다. | num <= 3; |
| == | 두 개 항의 값이 같으면 참, 아니면 거짓을 반환한다. | num == 3; |
| != | 두 개 항이 다르면 참, 아니면 거짓을 반환한다. | num != 3; |
논리 연산자
논리 연산자 종류
| 연산자 | 기능 | 연산 예 |
|---|---|---|
| &&(논리 곱) | 두 항이 모두 참인 경우에만 결과 값이 참이다. 그렇지 않은 경우 모두 거짓이다. | booleanval = (6 > 4) && (6 > 3); |
| || (논리 합) | 두 항 중 하나의 항만 참이면 결과 값은 참이다. 두 항이 모두 거짓이면 결과 값은 거짓이다. | booleanval = (6 > 4) || (6 < 3); |
| ! (부정) | 단한 연산자다. 참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꾼다. | booleanval = !(5 > 2); |
instanceof
- 객체 타입을 확인하는 연사자다.
- 형변환 가능 여부를 확인하며 true/ false로 결과를 반환한다.
- 주로 상속 관계에서 부모 객체인지 자식 객체인지 확인하는데 사용한다.
- 형변환이 불가능한(타입이 상위클래스도 하위클래스도 아닐경우) 에러가 발생한다.
기본 사용방법
- 객체 instanceof 클래스
class Parent{}
class Child extends Parent{}
public class InstanceofTest {
public static void main(String[] args){
Parent parent = new Parent();
Child child = new Child();
System.out.println( parent instanceof Parent ); // true
System.out.println( child instanceof Parent ); // true
System.out.println( parent instanceof Child ); // false
System.out.println( child instanceof Child ); // true
}
}
System.out.println( parent instanceof Parent): 부모가 본인 클래스를 찾있으니 true- ``System.out.println( child instanceof Parent )` : 자식이 상속받은 부모 클래스를 찾있으니 true
System.out.println( parent instanceof Child ): 부모가 자식 클래스를 찾았으니 falseSystem.out.println( child instanceof Child ): 자식이 자식 클래스를 찾았으니 true
assignment(=) operator
대입 연산자 종류
| 연산자 | 설명 |
|---|---|
| = | 왼쪽의 피연산자에 오른쪽의 피연산자를 대입한다. |
| += | 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결과값을 왼쪽의 피연산자에 대입한다. |
| -= | 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결과값을 왼쪽의 피연산자에 대입한다. |
| *= | 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결과값을 왼쪽의 피연산자에 대입한다. |
| /= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 결과값을 왼쪽의 피연산자에 대입한다. |
| %= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 나머지를 왼쪽의 피연사자에 대입한다. |
| &= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND 연산한 후, 그 결과값을 왼쪽의 피연산자에 대입한다. |
| |= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR 연산한 후, 그 결과값을 왼쪽의 피연산자에 대입한다. |
| ^= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR 연산한 후, 그 결과값을 왼쪽의 피연산자에 대입한다. |
| <<= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼 왼쪽으로 시프트한 후, 그 결과값을 왼쪽의 피연산자에 대입한다. |
| >>= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호를 유지하며 오른쪽으로 시프트한 후, 그 결과값을 왼쪽의 피연산자에 대입한다. |
| >>>= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽으로 시프트한 후, 그 결과값을 왼쪽에 피연산자에 대입한다. |
화살표(->) 연산자
- 자바 8 버전부터 추가된 것으로 람다 표현식과 함께 사용된다.
- 람다 표현식이란 간단히 말해 메소드를 하나의 식으로 표현한 것이다.
메소드
int min(int x, int y){
return x < y ? x : y;
}
람다 표현식
(x,y) -> x< y? x : y;
- 자바스크립트에서 => 비슷한 것 같다. 거기서도 함수를 간단히 표현할 수 있다.
람다 표현식 문법
(매개변수목록) -> {함수 몸체}3항 연산자
- 3개의 피연산자를 필요로 하는 연산자다.

예시
- if 문
int A = 0;
if(1 > 3){
A = 10;
}else{
A = 30;
}
// 결과 A = 30;
- 삼항 연산자
int A = (1 > 3) ? 10 : 30; // 결과 A = 30;
연산자 우선 순위
1. 연산자 종류
| 연산자 종류 | 연산자 | 피연산자 수 | 산출 값 | 설명 |
|---|---|---|---|---|
| 산술 연산 | +, -, *, /, % | 이항 | 숫자 | 사칙연산 및 나머지 계산을 한다. |
| 부호 | +,- | 단항 | 숫자 | 음수 / 양수 부호 |
| 문자열 | + | 이항 | 문자 | 두 문자를 연결시킨다. |
| 대입 연산 | =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= | 이항 | 다양 | 우변의 값을 좌변의 변수에 대입한다. |
| 증감 연산 | ++, -- | 단항 | 숫자 | 1만큼 증가 / 감소 |
| 비교 연산 | ==, !=, <, >, <=, >=, instanceof | 이항 | boolean | 값의 비교 |
| 논리 연산 | !, &, |, &&, || | 이항, 단항 | boolean | 논리적 NOT, AND, OR 연산 |
| 조건 연산 | (조건식) ? A : B | 삼항 | 다양 | 조건식에 따라 참이면 A, 거짓이면 B 선택 |
| 비트 | ~, &, |, ^ | 단항, 이항 | 숫자, boolean | 비트 NOT, AND, OR, XOR 연산 |
| 비트 쉬프트 | >>, <<. >>> | 이항 | 숫자 | 비트를 좌 / 우측으로 밀어서 이동 |
2.연산 방향과 우선순위
| 우선순위 | 연산자 | 피연산자 | 연산 방향 |
|---|---|---|---|
| 0 | () 괄호 속 연산자 | 다양 | - |
| 1 | 증감(++, --), 부호(+, -), 비트 (~), 논리 (!) | 단항 | <- |
| 2 | 산술(*, /, %) | 이항 | -> |
| 3 | 산술(+, -) | 이항 | -> |
| 4 | 쉬프트(>>, <<, >>>) | 이항 | -> |
| 5 | 비교(<, >, <=, >=, instanceof) | 이항 | -> |
| 6 | 비교(==, !=) | 이항 | -> |
| 7 | 논리 & | 이항(단항) | -> |
| 8 | 논리 ^ | 이항(단항) | -> |
| 9 | 논리 | | 이항(단항) | -> |
| 10 | 논리 && | 이항 | -> |
| 11 | 논리 || | 이항 | -> |
| 12 | 조건 (? :) | 삼항 | -> |
| 13 | 대입(=, +=, -=, /=, *=, %=, &=, ^=, |=, <<=, >>=, >>>=) | 이항 | <- |
예시
x > 0 && y < 0>, < 비교 연산이 먼저 수행된 후 && 연산이 처리되어 최종 값이 반환된다.
연산자 우선순위가 같으면, 연산 방향에 따라 달라진다.
100 * 2 / 3 % 5- 모든 연산자들의 우선순위가 같다. 연산 방향이 왼쪽에서 오른쪽이므로 *, /, % 순으로 진행된다.
- 결과 값은 1이다.
a = b = c = 5;- 모두 대입연산자 이므로 연산 방향이 오른쪽에서 왼쪽으로 진행된다.
- c = 5, b = c, a = b 순으로 진행된다.
- a, b, c 모든 변수에 5가 대입된다.
요약
- 단항, 이항, 삼항 연산자 순으로 우선순위를 갖는다.
- 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 갖는다.
- 단항과 대입 연산자를 제외한 모든 연산 방향은 왼쪽에서 오른쪽이다. ( ->)
- 복잡한 연산식에는 () 괄호를 사용해서 우선순위를 정해준다.
(optional) Java 13. switch 연산자
- 자바 13전에도 자바 12에서도 switch를 사용할 수 있었다.
- 13에서 yield가 추가되었다.
예시
public static void main(String[] args){
String str = "four";
int value = switch (str) {
case "one":
System.out.println("This one");
yield 1;
case "two":
System.out.println("This two");
yield 2;
default:
System.out.println("Other");
yield -1;
}
System.out.println(value);
}728x90
LIST
'자바' 카테고리의 다른 글
| [백기선] 5주차 과제: 클래스 (0) | 2021.10.31 |
|---|---|
| [백기선]4주차 과제: 제어문 (0) | 2021.10.24 |
| [백기선] 2주차 과제: 자바 데이터 타입, 변수 그리고 배열 (0) | 2021.10.10 |
| [백기선] 1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2021.10.03 |
| 생성자 (0) | 2021.07.02 |
Comments