연산을 하는 문자
우선순위 | 연산자 | 연산자 |
---|---|---|
1 | 최우선연산자 | [ ], ( ) |
2 | 단항연산자 | !, ~, +, -, ++ |
3 | 산술연산자 | +, -, *, -, % |
4 | 쉬프트 연산자 | <<, >> |
5 | 관계 연산자 | <, >, ==, != |
6 | 논리 연산자 | &&, // |
7 | 삼항 연산자 | (조건)?참:거짓 |
8 | 대입 연산자 | =, +=, -= |
연산자 | 기능 |
---|---|
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
% | 나머지 |
변수 앞에 붙어 변수 값의 부호를 변경
int a = -1;
System.out.println(-a); // a의 부호가 변경됨
논리형 변수 앞에 붙어 변수의 값을 변경
boolean a = true;
boolean b = false;
System.out.println(a); //true 출력
System.out.println(!b); // true 출력
부호에 따라 변수의 값을 1 증가하거나 감소
증감연산자의 사용 방법
1. 전위형: ++변수명, --변수명
2. 후위형: 변수명++, 변수명--
package day02;
public class Day02Ex {
public static void main(String[] args) {
int a= 1;
System.out.println(a);
a++; // a값 1 증가: 후위형
System.out.println(a); // a = 2
System.out.println(++a); // a= 3, a의 값 1증가, 전위형: 증가가 먼저 됨
System.out.println(a++); // a= 3, a의 값 1증가, 하지만 후위형으로 print가 된 후 증가가 됨
System.out.println(a); // a= 4, 윗 줄에서 a가 일 증가했음
}
}
종류 | 연산자 | 연산자 사용방법 | 설명 |
---|---|---|---|
같다 | == | a==b | a와 b가 같으면 참 |
작다 | < | a<b | a가 b보다 작으면 참 |
크다 | > | a>b | a가 b보다 크면 참 |
작거나 같다 | <= | a<=b | a가 b보다 작거나 같으면 참 |
크거나 같다 | >= | a>=b | a가 b보다 크거나 같으면 참 |
같지 않다 | != | a!=b | a와 b가 같지 않으면 참 |
※ 문자열 비교 시에는 등호(==)가 아닌 문자열.equals(비교문자열)을 사용한다.
종류 | 연산자 | 사용 예시 | 설명 |
---|---|---|---|
AND | && | a&&b | a가 참이고, b가 참이면 결과는 참 |
OR | || | a||b | a가 참이거나 b가 참이면 결과는 참 |
NOT | ! | !a | a가 참이면 거짓, 거짓이면 참 |
비트 단위로 연산을 하는 연산자
→ 비트: 데이터의 최소 단위(2진수)
종류 | 연산자 | 사용 예시 | 설명 |
---|---|---|---|
비트AND | & | a&b | a가 1이고, b가 1이면 결과 1 |
비트OR | | | a|b | a가 1이거나 b가 1이면 결과 1 |
비트XOR | ^ | a^b | a와 b가 서로 다르면 1, 같으면 0 |
비트NOT | ~ | ~a | a가 1이면 0, 0이면 1 |
* NOT 연산 공식: ~a = -a-1
예) ~5 = -6, 반대로 ~-6=5
1) ~5(0101(2)가 10(1010(2))이 아닌 이유
5 : 0101(2)
-> 편의상 5를 4bit로 표현한 것
즉, 우리 컴퓨터는 64비트를 사용하고 있고, 5는
0000 0000 0000 ... 0000 0101 을 편의상 4bit로만 표현했다는 것
이에 대한 NOT 연산을 하게 되면
0을 모두 1로 바꾸고 1을 0으로 바꾸기 때문에
1111 1111 1111 ... 1111 1010으로 숫자가 변환된다.
10은 0000 0000 .... 0000 1010이므로 ~5가 10이 될 수 없다.
2) 부호가 바뀐 이유
또한, 컴퓨터에서 부호를 표현하는 비트는 최상위비트로
맨 앞에 있는 숫자가 0인지, 1인지에 따라 부호가 결정된다.
최상위 비트가 0일 때 양수, 1일 때 음수로 결정되므로 부호가 -로 결정된다.
3) 1111 1111 ... 1111 1010이 -6인 이유
1111 1111 ... 1111 1010을 모두 계산하기 어렵기 때문에
역으로 6이 2진수로 나타냈을 때의 값을 계산해보면,
6 = 0110(2)이 나온다
64비트로 변환하면 0000 0000 .... 0110이며
-6은 1111 1111 .... 1010 이므로 두 수를 더하면 0이 나오게 된다.
(양 자리수의 덧셈에서 수가 2가 되면 0이 되고 다음 자리수로 넘어가게 되므로)
따라서 1111 ... 1010은 -6이다.
쉬프트 연산 = 비트 이동 연산
종류 | 연산자 | 연산자 사용방법 | 설명 |
---|---|---|---|
왼쪽 쉬프트 | << | a<<n | a의 비트를 왼쪽으로 n만큼 이동 |
오른쪽 쉬프트 | >> | a>>n | a의 비트를 오른쪽으로 n만큼 이동 |
* 쉽게 푸는 법
1) 오른쪽 쉬프트 연산자는 오른쪽으로 1칸씩 이동할 때마다 2로 나눈 몫(나머지는 버림)
2) 왼쪽 1칸 씩 이동할 때마다 2로 곱한 값
* 예시
1) 15>>2 = 3(0011(2)) → 1111을 2칸 오른쪽 쉬프트
2) 5<<4 = 80(0101 0000) → 0000 0101을 4칸 왼쪽 쉬프트
항이 3개인 연산자
* (조건)?참일때 값: 거질일 때 값
int age = 17;
System.out.println(age>19?"성인입니다":"청소년입니다.");
//출력 값
청소년입니다.
값을 할당할 때 사용하는 연산자
작성방법: 저장공간 = 값
ex) x = 3;
산술연산자+대입연산자
작성방법: [변수][산술연산자][대입연산자][값]
ex) x+=3;
객체의 타입을 확인하는 연산자
작성방법: instanceof 클래스명