자바(Java) - 여러가지 연산자
연산자
- 프로그램에서 데이터를 처리하여 결과를 산출하는 것을 연산(operation)이라 한다
- 연산에 사용되는 표시나 기호를 연산자(operator)라고 한다.
- 항(Term) : 연산을 할 때 사용하는 값이며, 항의 수에 따라 단항, 이항, 삼항 연사자로 구분한다.
- 단항연산자: +num;
- 이항연산자: a+b;
- 삼항연산자: (a>b)?1:0;
연산자의 종류
대입 연산자
- 우측의 데이터를 좌측의 변수에 대입하는 연산자
1
int i = 1;
부호 연산자
- 부호를 나타내는 연산자
1
+10 , -10
산술 연산자
- 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%) 처럼 산술에 이용되는 연산자
1
2
3
4
5
6
7
8
int x = 10;
int y = 2;
x + y; //결과 : 12
x - y; //결과 : 8
x * y; //결과 : 20
x / y; //결과 : 5
x % y; //결과 : 0
증감 연산자
- 값을 1만큼 늘리거나 줄일 때 사용하는 연산자
1
2
3
4
5
6
int a=1, b=1;
++a; //결과 : 2
b++; //결과 : 1
--a; //결과 : 0
b--; //결과 : 1
증감 연산자에 대한 이해
- ++a 의 경우 먼저 피연산자의 값을 1 증가시킨 후에 해당 연산을 진행한다.
- a++ 의 경우 먼저 해당 연산을 수행하고 나서 피연산자의 값을 1 증가시킨다.
관계 연산자
두 항의 크기 비교하는 연산자이며, 결과 값은 true 또는 false 로 출력
1
2
3
4
5
int a=10, b=9;
a>b; //결과 : true
a<b; //결과 : false
a==b; //결과 : false
a!=b; //결과 : true
논리 연산자
논리식에 대해 참,거짓 판단하는 연산자이며, 결과 값은 true 또는 false 로 출력
1
2
(10>9) && (1==0); //결과 : false (&&는 그리고(and)란 의미이므로 2개의 조건이 모두 만족해야 한다.)
(10>9) || (1==0); //결과 : true (||는 또는(or) 이란 의미이므로 2개의 조건 중 하나만 만족하면 된다.)
복합 대입 연산자
대입 연산자를 다른 연산자와 조합한 연산자
1
2
int a = 10, b=5;
a+=b; //결과 : 15 (a = a+b 와 같은 의미)
삼항 연산자
<조건식?참:거짓> 의 방법으로 사용하는 연산자입니다.
1
2
3
4
5
6
int a=10, int b=9;
//a가 b보다 크다면 true 아니면 false를 출력하는 연산을 한다.
//따라서 result는 true라는 결과가 출력 된다.
String result = (a>b)?"true":"false";
System.out.println(result); //결과 : true
이진법
이진법은 우리가 사용하는 숫자(십진법) 과 다르게 컴퓨터에서 데이터 표현에 사용하는 방식이며, 0과 1 두 개의 수를 이용하여 숫자를 표현한다.
10진수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
2진수 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 |
이진법에서 각 자리수는 우측부터 20, 21, 22… 순을 의미
예를들어 10진수 5를 2진수로 표현하면 22(4) + 20(1) 인 101이다.
이진법에서 양수와 음수를 판단하는 기준인 부호 비트는 제일 왼쪽에 있는 최상위 비트를 기준으로 하는데 부호 비트가 0이면 양수, 1이면 음수를 의미한다.
2의 보수
10진수에서 음수를 표현하고 싶을 때는 마이너스(-)기호를 사용하면 되지만, 2진수에서는 다른 방식으로 음수를 표현한다.
그렇기 때문에 이진법에서 음수를 표현하고 싶을 때에는 2의 보수를 이용한다.
예를 들어서 -5를 표현하고 싶다면 10진수 5의 2진수(0101) 을 반전 후 1을 더한 값 1011이 2의 보수이다. (101의 반전 : 010 + 1)
비트 논리 연산자
각각의 비트 단위로 연산하는 연산자입니다.
- AND 연산자(&) : 두 개의 비트 값이 모두 1인 경우에만 결과 1
- OR 연산자(|) : 두 개의 비트 값 중 하나라도 1이면 결과 1
- XOR 연산자(^) : 두 개의 비트 값이 같으면 0, 다르면 1
- NOT 연산자(~) : 비트 값이 0이면 1로, 1이면 0으로 반전
비트 이동 연산자
-
Left Shift 연산자(<<) : 비트를 왼쪽으로 이동
-
Right Shift 연산자(>>) : 비트를 오른쪽으로 이동
- 오른쪽으로 이동할 때 (>>) 는 기존의 비트 연산자의 부호 비트가 그대로 따라온다.
- 하지만 (>>>) 는 부호 비트의 값을 무조건 0으로 고정한다.
1
2
3
4
5
6
int num1 = 8, num2 = -8;
System.out.println("<< 연산자에 의한 결과 : "+ (num1 << 1)); //결과 : 16 (곱셈 : num1 * 2^1)
System.out.println(">> 연산자에 의한 결과 : "+ (num2 >> 2)); //결과 : -2 (나눗셈 : num2 / 2^2)
System.out.println(">>> 연산자에 의한 결과 : "+ (num1 >>> 2)); //결과 : 2
System.out.println(">>> 연산자에 의한 결과 : "+ (num2 >>> 2)); //결과 : 1073741822
댓글남기기