Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
more
Archives
Today
Total
관리 메뉴

으나님의 잡다한 개발상식

(JAVA) 연산자 본문

JAVA

(JAVA) 연산자

스위트치즈 2019. 11. 6. 20:32

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
j=i++; 실행 후 i는 6 j는 5

(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