No. 01

 

 

산술 연산자(Arithmetic Operator)


산술 연산자는 가장 많이 사용하는 연산자로 수식 계산에 사용된다. 사칙연산은 일상생활에서 자주 사용하여 익숙하지만 몇 가지만 주의하면 된다.





No. 02

 

 

사칙 연산자


사칙 연산은 이미 알고 있는 것처럼 곱셉(*), 나눗셈(/), 나머지(%) 연산자가 덧셈(+), 뺄셈(-)연산자보다 우선순위가 높으므로 먼저 처리된다.

그리고 나눗셈 연산자에서 피연산자가 정수형일 경우 0으로 나눌 수 없다.


예제1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Operator {
 
    public static void main(String[] args) {
        
        int x = 5;
        int y = 2;
        
        System.out.printf("%d + %d = %d%n",x, y, x+y);
        System.out.printf("%d - %d = %d%n",x, y, x-y);
        System.out.printf("%d * %d = %d%n",x, y, x*y);
        System.out.printf("%d / %d = %d%n",x, y, x/y);
        System.out.printf("%d / %f = %f%n",x, (float)y, x/(float)y);
 
    }//main
 
}//class
                                              Colored By Color Scripter


실행 결과

5 + 2 = 7

5 - 2 = 3

5 * 2 = 10

5 / 2 = 2

5 / 2.000000 = 2.500000


두 변수 x,y의 사칙연산 결과를 출력하는 예제이다.

정수에 대한 '/'는 우리가 흔히 생각하는 연산과 조금 다르다. 정수 연산에서 '/' 연산자는 정수 몫을 구한다.

int형이므로 정수만 남고 소수점 이하는 버려진다. 올바른 연산 결과를 얻기 위해서는 두개의 피연산자 중 한 쪽을 실수형으로 형변환해야 한다.

그래야 타입이 일치하지 않으므로 int타입보다 범위가 넓은 실수형(float 또는 double)으로 자동형변환 된 후 연산을 수행한다.

위의 예제에서는 변수 y를 float형으로 형변환 시킨 후 연산을 수행하였다. 결과 값도 역시 float형이다.



◈ 예제2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Operator {
 
    public static void main(String[] args) {
        
        byte x = 10;
        byte y = 30;
        //byte result = x + y;//[x] 에러 발생
        byte result = (byte)(x+y);        
        
        System.out.println(result);
 
    }//main
 
}//class
                       Colored By Color Scripter


실행 결과

40


위의 예제에서 주석처리한 연산처럼 프로그램을 실행하면 에러가 발생한다. 그 이유는 a와 b는 모두 int형보다 작은 byte형이기 때문에 x와 y를 int형으로 변환한 다음 연산을 수행한다. 그래서 int형인 연산결과를 byte형에 담지 못하는 것이다. 연산 결과를 byte형으로 형변환해주어야 byte형 변수에 저장할 수 있다. 그래서 자바에서 정수 연산시 int형을 사용하는 것을 추천한다.



◈ 예제3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Operator {
 
    public static void main(String[] args) {
        
        byte x = 10;
        byte y = 30;        
        byte result1 = (byte)(x*y); //데이터 손실 발생, byte형의 범위:-128~127    
        int result2 = x*y; //해결책 : int형 변수에 담는다.
                
        System.out.println("result1:"+result1);
        System.out.println("result2:"+result2);
 
    }//main
 
}//class
                                                                  Colored By Color Scripter


실행 결과

result1:44

result2:300


위의 예제에서 result1의 결과는 x,y의 연산 결과를 byte형으로 변환해줬음에도 불구하고 예상치 못한 값이 저장되었다.

그 이유는 x,y의 연산결과가 byte형의 범위인 '-128~127'을 넘기 때문에 데이터 손실이 일어났다.

이를 해결하기 위한 방법으로는 더 큰 값을 저장할 수 있는 정수형 변수에 저장하는 것이다. 위의 예제에서는 int형 변수에 저장하였다.



◈ 예제4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Operator {
 
    public static void main(String[] args) {
        
        int x = 1000000;
        int y = 3000000;        
            
        long result1 = x*y; //x,y의 연산 결과는 이미 int형 
        long result2 = x*(long)y; //해결방법 : 한쪽을 'long으로 형변환
                
        System.out.println(result1);
        System.out.println(result2);
 
    }//main
 
}//class
                                                     Colored By Color Scripter


실행 결과

2112827392

3000000000000


위의 예제에서는 result1은 long형으로 x,y의 연산결과의 충분히 저장할 수 있으나, 결과는 전혀 다른 값이다.

그 이유는 x,y의 연산 결과는 이미 int형이므로 이미 데이터의 손실이 생겨 long형에 저장하여도 결과는 마찬가지이다.

이를 해결하기 위한 방법으로는 한쪽을 long형으로 형변환하여 연산 결과도 long형으로 나오도록 한 뒤 저장해야 한다.




No. 03

 

 

나머지 연산자 %


나머지 연산자는 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값이 결과이다. 나머지 연산의 용도는 다양하지만 주로 짝수, 홀수 또는 배수 검사 등에 사용된다.


◈ 예제1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Operator {
 
    public static void main(String[] args) {
        
        int x = 5;
        int y = 2;
        
        System.out.printf("%d를 %d로 나눈 몫:%d%n",x,y,x/y);
        System.out.printf("%d를 %d로 나눈 나머지:%d%n",x,y,x%y);        
 
    }//main
 
}//class
                                                          Colored By Color Scripter


실행 결과

5를 2로 나눈 몫:2

5를 2로 나눈 나머지:1


위의 예제와 같이 나머지를 정수 값으로 구한다. 예제를 보면 따로 설명없이 이해할 수 있을 것이다.



◈ 예제2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;
 
public class Operator {
 
    public static void main(String[] args) {
                
        String strNumber;
        int number, result;
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("[홀수/짝수 판별] 숫자를 입력하세요.");
        strNumber = scanner.nextLine();
        number = Integer.parseInt(strNumber);
        result = number % 2;
        
        System.out.println("2로 나눈 결과 값 : "+result);        
 
    }//main
 
}//class
                                              Colored By Color Scripter


실행 결과

[홀수/짝수 판별] 숫자를 입력하세요.

25

2로 나눈 결과 값 : 1


위의 예제는 숫자를 입력받아 2로 나눈 나머지 값을 출력하는 프로그램이다.

나눈 결과 값이 0이면 홀수 1이면 짝수라고 판단할 수 있다. 이처럼 나머지 연산자를 응용하여 사용할 수 있다.




No. 04

 

 

문자의 사칙연산


사칙연산은 숫자뿐만 아니라 문자도 가능하다. 문자는 실제로 컴퓨터 내부에서 아스키코드나 유니코드로 바뀌어 저장되므로 정수간의 연산과 동일취급 된다.



◈ 예제1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Operator {
 
    public static void main(String[] args) {
        
        char zero = '0';
        char nine = '9';
        
        int number = nine - zero;
        //[1]int number = '9' - '0';
        //[2]int number = 57 - 48;
        //[3]int number = 9;
                
        System.out.println(number);        
 
    }//main
 
}//class
                       Colored By Color Scripter


실행 결과

9


위의 예제는 문자를 숫자로 변환한 프로그램이다.

문자의 연산이 가능한 이유는 말했듯이 문자형은 컴퓨터 내부에 아스키 코드나 유니코드로 저장된다. 아스키 코드를 보면 문자'0'의 아스키코드는 48이고 문자'9'의 아스키 코드는 57이다. 그러므로 숫자형식으로 된 문자'9'에서 문자 '0'을 빼면 실제 숫자값을 얻을수가 있다.

c.f) 아스키 코드나 유니코드는 '0'~'9'까지의 문자가 연속적으로 배치되어 있다. 또한 'A'~'Z', 'a'~'z' 역시 마찬가지이므로 이를 이용할 수도 있다.



◈ 예제2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Operator {
 
    public static void main(String[] args) {
        
        char c1 = 'A';
        
        int i = c1 + 1;        
        //char c2 = c1 + 1;//에러 발생, 결과 값은 int형인 66
        char c2 = (char)(c1+1);//해결방법 : 결과값을 char형으로 형변환
                
        System.out.println("i:"+i);
        System.out.println("c2:"+c2);        
 
    }//main
 
}//class
                                                     Colored By Color Scripter


실행 결과

i:66

c2:B


위의 예제에서 알 수 있듯이 문자형과 정수형인 숫자 1의 결과 값은 int형이다. 그렇기 때문에 int형에는 저장이 가능하지만 형변환 없이 char형에는 저장할 수가 없다. 그러므로 결과 값을 다시 char형으로 형변환 해주면 'A'의 다음 문자인 'B'를 char형으로 저장할 수 있다.




+ Recent posts