으나님의 잡다한 개발상식
(JAVA) 연산자 본문
1. 연산자(Operator)란?
(1) 연산자(Operator)
어떠한 기능을 수행하는 기호 등을 뜻한다.
(2) 피연산자(Operand)
연산자의 작업 대상(변수, 상수, 리터럴, 수식 등)
Ex a+b 식에서 연산자 : + 피연산자 : a, b |
ex)
2. 연산자의 종류
(1) 단항 연산자
(2) 이항 연산자
(3) 삼항 연산자
(4) 대입 연산자
3. 단항 연산자
(1) 종류
+, -, (type casting), ++, --, ~, ! 등이 있다.
(2) 증감연산자 ++, --
1) 전위형 : 값이 참조되기 전에 증가시킨다.
2) 후위형 : 값이 참조된 후에 증가시킨다.
public class ex03 {
public static void main(String [] args) {
int i;
int j;
//1. 전위증감자
i=5; j=0;
j=++i;
System.out.println("j=++i; 실행 후 i는 "+i+" j는 "+j);
//2. 후위증감자
i=5; j=0;
j=i++;
System.out.println("j=i++; 실행 후 i는 " +i+" j는 "+j);
}
}
[실행결과] j=++i; 실행 후 i는 6 j는 6 |
(3) 부호연산자(+,-)와 논리부정연산자(!)
1) 부호연산자(+, -)
'+'는 피연산자에 '1'을 곱하고, '-'는 피연산자에 -1을 곱한다.
2) 논리부정연산자(!)
true는 false로, false는 true로 연산한다. 피연산자가 boolean일 때만 사용 가능하다.
※ boolean :조건을 true/false로만 연산하는 자료형
4. 이항 연산자
(1) 특징
1) 이항 연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시키며 피연산자 중 표현범위가 더 큰 타입으로 형변환한다. 즉 char + int -> int + int = int로 저절로 연산이 된다.
2) 이항 연산자로 연산을 수행할 경우 자료형에서 표현할 수 있는 범위를 넘어선 수가 도출되면 overflow/underflow가 일어난다.
EX)
byte a = 10;
byte b = 20;
byte c = a+b;
byte c=(byte)a+b; //Error : a에 대해서만 형변환이 되고 b는 int로 인식됨.
byte c=(byte)(a+b); //OK : a+b 값에 대해 형변환이 이루어짐
EX)
int a = 1000000;
int b = 2000000;
long c = a*b //여기서 C는 '2000000000'이 나오지 않고 '-1454759936'이 나온다.
//a와 b를 곱한 수가 int의 범위를 넘어섰기 때문에 음수로 변환된다.
long c = (long)a*b; //이렇게 범위가 더 큰 long형으로 type casting을 해야 '2000000000'가 나온다.
EX)
char c1 = 'a'
char c2 = c1+1; //Error : char + int가 되므로 자료형이 동일하지 않아 오류가 생긴다.
char c2 = (char)(c1+1); //OK : c1의 캐릭터값인 a에 1이 증가하여 해당 계산값은 'b'가 도출된다.
(2) 산술 연산자(+, -, *, /, %, <<, >>, >>>)
1) 나머지연산자(%)
나누기 한 나머지를 반환하며 주로 홀수, 짝수, 배수검사에 사용된다.
EX)나머지 연산자를 이용하여 시간 구하기
import java.util.Scanner; //데이터 입력
public class ex05 {
public static void main(String [] args) {
Scanner scan = new Scanner(System.in); //데이터 입력
//Scanner = 참조형(class)
int time=scan.nextInt(); //데이터 입력 버퍼 메모리
int hour = time/3600;
int min = ((time%3600)/60);
int sec = ((time%3600)%60);
System.out.println(hour + "시간," +min+"분, "+sec+"초" );
}
}
2) 쉬프트연산자(<<, >>)
2진수의 자리를 옮기는 연산자이다.
EX)
5<<3을 구하면?
5를 2진수로 바꾸어 왼쪽으로 쉬프트를 3번하라는 의미이다. 풀이과정은 다음과 같다.
1. 5를 2진수로 변환 : 0101 -> 5
2. 쉬프트 1번 : 01010 -> 10
3. 쉬프트 2번 : 010100 -> 20
4. 쉬프트 3번 : 0101000 -> 40
따라서 답은 40이다.
2) 비교 연산자
a. <, >, <=, >=, ==, !=
b. java는 true나 false로 나오지만 c언어는 0과 1로 변환된다.
c. String은 참조형이기 때문에 '=='로 비교할 수 없다.
3) 논리 연산자
a. 종류
&&(AND), ||(OR), &, ^, |
b. 비트 연산자(&, ^, |)
- 2진수 숫자로 계산한다.
- &(AND) : 피연산자 양쪽 모두 1이면 1이다.
- |(OR) : 피연산자 중 어느 한 쪽이 1이면 이다.
- ^(XOR) : 피연산자가 서로 다를 때 1이다.
x | y | x|y | x&y | x^y |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
0 | 0 | 0 | 0 | 0 |
3 | 5 |
10진수 3 : 0011 10진수 5 : 0101 결과 : 0111 = 10진수 7 |
3&5 |
10진수 3 : 0011 10진수 5 : 0101 결과 : 0001 = 10진수 1 |
3^5 |
10진수 3 : 0011 10진수 5 : 0101 결과 : 0110 = 10진수 6 |
5. 삼항 연산자
(조건식) ? 식1 : 식2
true이면 식1의 결과를, false이면 식2의 결과를 반환한다.
6. 대입 연산자
오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다. 단, 왼쪽 피연산자는 상수가 아니어야 한다.
final int MAX = 3;
MAX = 10; //Erorr 이전에 'final'로 선언해서 상수가 되어버렸기 때문
7. 연산자의 우선순위
따라서 'x=y=3'과 같은 식이 있으면 y에 먼저 3이 대입된다.
'JAVA' 카테고리의 다른 글
(JAVA) method (0) | 2019.11.23 |
---|---|
(JAVA) 반복문에서 label 사용하기 (0) | 2019.11.22 |
(JAVA) String split으로 쪼개서 2차원 배열로 만들기 (0) | 2019.11.22 |
(JAVA) 조건문 (0) | 2019.11.06 |
(JAVA) 기초 (0) | 2019.11.05 |