자바(Java)의 기초 박살내기 - 연산자(Operator)



안녕하세요? 이번 시간에는 연산자에 대하여 배워보겠습니다. 연산자는 말 그대로 연산(계산)을 위해 사용하는 기호입니다.

연산자에 들어가기전에 출력문은 배웠으니 입력문을 배우고 가겠습니다.


 1. Scanner 클래스


- Scanner은 java.util.Scanner 클래스 이므로 소스 맨 앞줄에 import문에 필요합니다.

import java.util.Scanner 

- Scanner은 객체를 생성해서 사용해야 합니다.

Scanner a = new Scanner(System.in);

- Scanner은 입력되는 키 값을 공백으로 구분되는 아이템 단위로 읽습니다.

- Scanner 주요 메서드

생성자/메서드 

설명 

 String next()

 다음 아이템을 찾아 문자열로 반환

 boolean nextBoolean()

 다음 아이템을 찾아 boolean으로 변환하여 반환

 byte nextByte()

 다음 아이템을 찾아 byte로 변환하여 반환

 double nextDouble()

 다음 아이템을 찾아 double로 변환하여 반환

 float nextFloat()

 다음 아이템을 찾아 float로 변환하여 반환

 int nextInt()

 다음 아이템을 찾아 int로 변환하여 반환

 long nextLong()

 다음 아이템을 찾아 long으로 변환하여 반환

 short nextShort()

 다음 아이템을 찾아 short로 변환하여 반환

 String nextLine()

 한 라인 전체(‘\n’ 포함)를 문자열 타입으로 반환



<Scanner 예제코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
public class ScannerExam 
{
    public static void main(String args[])
    {
        System.out.println("이름, 주소, 나이, 신장을 빈칸으로 분리하여 순서대로 입력하세요");
        Scanner a = new Scanner(System.in);    // Scanner 'a'라는 객체 생상(a는 자기가 짓고싶은데로)
        
        String name = a.next();    // 다음 입력문을 문자열로 반환
        String addr = a.next();    // 다음 입력문을 문자열로 반환
        int     age = a.nextInt();    // 다음 입력문을 int로 반환
        double weight = a.nextDouble();    //다음 입력문을 double
        
        System.out.println("=========================");
        System.out.println("당신의 이름은 " + name + "입니다.");
        System.out.println("당신의 주소는 " + addr + "입니다.");
        System.out.println("당신의 나이는 " + age + "세 입니다.");
        System.out.println("당신의 몸무게는 " +weight+ "kg 입니다.");
 
    }
}
cs


<결과>

※참고 : 입력하는칸은 콘솔에 입력합니다. <결과>에서 파랑색쪽




 2. 연산자의 우선순위와 종류 


① 피 연산자의 개수에 따른 연산자의 종류

- 단항연산자 : 피 연산자가 1개인 연산자

- 이항 연산자 : 피 연산자가 2개인 연산자

- 삼항 연산자 : 피 연산자가 3개인 연산자

※참고 : 피 연산자란 연산에 참여하는 변수나 상수


② 용도에 따른 연산자 우선 순위

종류 

연산자 

최우선

( ), [ ] 

단항 연산자 

++, --, +, -, (type), !, ~ 

산술 연산자

%, /, *, +, - 

시프트 연산자

>>, <<, >>> 

관계 연산자

<, <=, >, >=, ==, != 

논리 연산자

&, ^, |, ~, &&, || 

삼항 연산자

? : 

대입 연산자 

=, +=, -=, *=, %=, /=, >>=, <<= 

콤마 연산자


③ 최우선 연산자

- ( ) : 우선순위 변경을 위해사용

- [ ] : 배열의 크기나 첨자를 나타낼 때 사용


④ 단항(Unary) 연산자

- ~ : 1의 보수를 구해주는 연산자.

- 양수의 1의 보수의 부호는 음수가 되고 절대값 1증가

- 음수의 1의 보수의 부호는 양수가 되고 절대값 1감소

- ! : NOT(true -> false, false -> true)

- 부호 +, - : '+'는 형식적으로 제공, '-'는 2의보수 연산자 or 부호바꿈연산자 

- 증감연산자 ++, -- : 일반적으로 단항연산자는 피 연산자의 왼쪽에 위치하지만 증감연산자는 왼쪽, 오른쪽 둘다 가능.

- ++ : 피 연산자 1증가

- -- : 피 연산자 1감소

- 증감연산자의 위치에 따라 연산결과가 달라질 수 있습니다.


<최우선 연산자, 단항 연산자 예제>

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Unary 
{
    public static void main(String args[]) {
        int a = 10, b = -10;
        boolean c = true, d = false;
        System.out.println("a= " + a + "\t b=" + b + "\t c=" + c + "\t d=" + d);
        System.out.println("~a=" + ~a);    // -11 1의 보수 연산(양수-> 음수 부호가 바뀌고 1증가됨)
        System.out.println("~b=" + ~b);    // 9 음수-> 양수 부호가 바뀌고 1감소됨
        System.out.println("!c=" + (!c) + "\t !d = " + (!d));    // true -> false, false -> true
        System.out.println("+a=" + (+a) + "\t +b = " + (+b));    // '+'는 형식적 제공
        System.out.println("-a= " + (-a) + "\t -b = " + (-b));    // '-'는 2의보수 연산자 or 부호바꿈연산자
    }
}
cs


<결과>


<증감 연산자 예제>

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
public class Fix1 
{
    public static void main(String args[])
    {
        int a = 10, b = 5;
        System.out.println("a = " + a +"\t b = " + b);
        
        ++a;
        --b;
        System.out.println("a = " + a +"\t b = " + b);
        
        a++;
        b--;
        System.out.println("a = " + a +"\t b = " + b);
        
        // 증감을 하기 전에 명령문을 먼저 처리하므로 10 출력
        System.out.println("후위 연산 a = " + a++);
        // 명령문이 처리후 증감한 a값 확인
        System.out.println("a 증가  = " + a);
        // 증감을 한 후에 명령문을 처리하므로 11 출력
        System.out.println("전위 연산 a = " + ++a);
 
 
    }
}
 
cs


<결과>


⑤ 산술연산자

- (+, -, *, /), 나머지 연산자( % )는 두 개의 피연산자를 가지는 이항연산자이며 산술 연산자는 피 연산자의 크기가 4byte보다 작으면 4byte(int)로 변환한 다음에 연산을 수행 

- 연산하기 전에 데이터형 일치시키기 (둘 중 더 큰 자료형으로)

- 정수와 정수 나눗셈시 정수로 나와야 하므로 소수는 버려지고 정수만 출력 된다.


<산술 연산자 예제>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Error 
{
    public static void main(String args[])
    {
        byte a = 10;
        byte b = 20;
 
        //byte c = a + b; 일경우 a, b 모두 int 형으로 변환 되어 연산 되기 때문에 에러 발생.
        byte c = (byte)(a + b);    // 형변환을 통해 byte 데이터 타입으로 바꿔주고 계산해야 한다. 
        
        System.out.println(c);
 
    }
}
cs


<결과>


⑥ Shift 연산자 (<< , >> , >>>)

      - 정수형데이터에서만 사용가능하고 2진수로 표현했을때 각 자리를 오른쪽 또는 왼쪽으로 이동

    - 오른쪽으로 n비트 이동하면 피연산자를 2의 n승으로 나눈 것과 같은 결과이다.

- '<<' 연산자의 경우, 피연산자의 부호에 상관없이 자리를 왼쪽으로 이동시킵니다.

- '>>' 연산자는 음수인 경우 부호를 유지시켜주기 위해서 빈자리를 1로 채웁니다.

- '>>>' 연산자는 부호에 상관없이 항상 0으로 빈자리를 채워줍니다.


<shift 연산자 예제>

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
public class Shift 
{
    public static void main(String args[])
    {
        int temp;
        
        System.out.println(-8);
        System.out.println(Integer.toBinaryString(-8));
        
        temp = -8 <<2;
        System.out.println("-8 << 2 = " + temp);
        System.out.println(Integer.toBinaryString(temp));
        
        System.out.println(-8);
        System.out.println(Integer.toBinaryString(-8));
        
        temp = -8 >> 2
        System.out.println"-8 >> 2 = " + temp); 
        System.out.println(Integer.toBinaryString(temp)); 
 
        System.out.println(-8); 
        System.out.println(Integer.toBinaryString(-8)); 
 
        temp = -8 >>> 2
        System.out.println"-8 >>> 2 = " + temp); 
        System.out.println(Integer.toBinaryString(temp)); 
    }
}
cs


<결과>


⑦ 관계 연산자

- 이항 연산자로 피 연산자의 크기를 비교하는 연산자

- 연산의 결과는 true or false

- <, >, <=, >= : 두 피 연산자의 크기를 비교(boolean형을 제외한 나머지 자료형 사용가능)

- ==, != : 두 피연산자의 값이 같은지 비교


⑧ 논리 연산자

- 논리연산자는 이항 연산자로 조건의 참, 거짓을 비교하는 조건 논리 연산자비트 논리 연산자로 나뉜다

- 조건 논리 연산자 ( ||, && ) : boolean형의 값을 결과로 하는 조건식만 허용 (조건문, 반복문에서 많이 사용된다.)

- '||'OR 결합이고 '&&' AND결합이다. 

- 비트 논리 연산자 ( |, &, ^, ~) : 피연사자끼리 이진 비트 연산을 수행해서 결과를 정수로 반환하는 연산자( 정수형만 사용가능)

-  '|'OR연산자, '&'AND연산자, '^'XOR연산자, '~'NOT연산자이다.

- AND, OR, XOR진리표

a

b 

AND 

OR 

XOR 

0

1



<논리 연산자 예제>

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
public class Bit 
{
    public static void main(String args[])
    {
        boolean pan;
        
        int x = 3;
        int y = 5;
        
        pan = 10 > 3 && 3 < 10;    // (10 > 3 = true) AND (3 < 10 = true) = true
        System.out.println("pan:" + pan);
        pan = 10 > 3 || 3 < 10;    // (10 > 3 = true) OR (3 < 10 = true) = true
        System.out.println("pan:" + pan);
        
        System.out.println("x는 " + x + "이고, y는 " + y + "일때, ");
        System.out.println("x | y = " + (x | y));    // ( 11 과 101 OR연산)
        System.out.println("x & y = " + (x & y));    // ( 11 과 101 AND연산)
        System.out.println("x ^ y = " + (x ^ y));    // ( 11 과 101 XOR연산)
        System.out.println("~x = " + ~x);            // ( 11 NOT)
        
        System.out.println("true | false = " + (true | false));
        System.out.println("true & false = " + (true | false));
        System.out.println("true ^ false = " + (true ^ false));
    }
}
cs


<결과>


⑨ 삼항연산자

삼항 연산자는 조건 연산자라고도 하며 3개의 피연산자를 필요로 하게 되는데 첫 번째 피연산자는 조건이며 두 번째 피연산자는 조건이 true일 때 반환 값 세 번째 피연산자는 조건이 false일 때 반환 값입니다.

- 기본형식 : 조건식? 식1:식2


⑩ 대입연산자

- 대입 연산자는 변수에 값 또는 수식의 연산결과를 저장하는데 사용됩니다.

- EX) x = y = 3일때 y = 3이 진행후 x= y가 수행된다.

- 대입연사자는 다른연산자와 결합하여 사용할 수 있다. 

EX) i = i + 3 ---------------> i += 3 


- 지금까지 연산자의 대해 알아보았습니다.  다음 시간에는 제어문에 대해 알아보겠습니다. 


  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유