본문 바로가기

수업 정리

3일차 수업 내용 정리

** Operator(연산자)
    => 산술연산(수치연산)과 논리연산(true, false)을 수행해주는 기호나 명령어

1. 연산자의 분류
  1) 피 연산자(연산에 사용되는 데이터)의 개수에 따른 분류
    => unary(단항) Operator : 피 연산자의 개수가 하나인 연산자
    => Binary(다항) Operator : 피 연산자의 개수가 2개인 연산자
    => 삼항 연산자 : 피 연산자의 개수가 3개인 연산자
  2) 우선순위나 목적에 따른 분류(우선 순위별)
    => 최우선 연산자 :  ( ), [ ](Index연산자)
    => 단항 연산자 : ++, --, +(부호), -, (Type - 자료형), !, ~
    => 산술 연산자 : %, *, /, +, -
    => shift 연산자 : >>, <<, >>>
    => 관계 연산자 : >, >=, <, <=, ==, !=
    => 논리 연산자 : &, |, ^, &&, ||
    => 삼항 연산자 : ? :
    => 대입 연산자 : =, +=...
    => 콤마 연산자 : ,

2. 단항 연산자
  1) +, - : 부호연산자
  2) (type) : 강제 형 변환 연산자
  3) ! : NOT 연산자
    => boolean에만 사용 가능(false -> true / true -> false)
  4) ~ : 1의 보수 연산자
    => 정수 데이터에만 사용 가능
    => 10진 정수를 2진수로 변환하여 비트 단위 연산을 통해 10진 정수 값 리턴
    => 양수의 경우는 절대값이 1이 큰 음수로, 음수는 절대값이 1이 적은 양수로 결과값 리턴
    => 그래픽 프로그램에서 많이 사용
  5) ++, -- : 증감 연산자
    => 정수 변수에서만 사용 가능(상수, 리터럴은 불가)
    => ++(변수 데이터 1증가)  /  --(변수 데이터 1감소)
    => 이 연산자는 피연산자의 앞, 뒤에 사용가능(해석이 다름)
    => ++변수(prefix) : 변수 값을 먼저 증가시키고 명령문에 사용
    => 변수++(postfix) : 명령문을 먼저 수행하고, 변수값을 증가
         System.out.println(a++); //++가 뒤에 있으므로 a의 값을 출력하고 1증가
         System.out.println(++a); //++가 앞에 있으므로 a+1연산 후 출력

3. 산술 연산자
    => %, *, /, +, - 
  1) %
    => %는 나머지를 구해주는 연산자로 정수 데이터에만 사용(ex - 10 % 7 = 3;)
  2) *, /, +, -
    =>모든 숫자 데이터에 사용 가능
    => 산술연산은 동일한 자료형 끼리만 가능. 서로 다른 자료형인 경우 더 큰 범위의 자료형으로 강제 형변환하여 수행
    => 산술 연산의 결과는 연산을 수행한 자료형으로 리턴
    => 산술 연산 결과가 int보다 작은 자료형일 경우 int로 변환하여 리턴
    => 정수 / 정수의 결과는 몫만 정수로 리턴
  3) 산술 연산시 되도록 소수가 있는 실수는 사용하지 않는 것이 좋음
    => 실수는 정확하게 표현하지 못하는 경우가 있어서 잘못된 결과를 리턴할 수 있음
    => 정확한 계산을 위해서는 정수로 변환하여 계산하거나, 각 자리를 나누어서 계산
         (대부분의 언어는 이러한 작업을 자동으로 해주는 클래스나 함수를 제공)

4. shift 연산자
    => <<, >>, >>>
    => 정수 데이터에만 사용되는 연산자
    => 10진 정수를 2진 정수로 변환하여 비트 단위로 작업후 다시 10진 정수로 리턴
    => << : 왼쪽으로 shift (1회 연산시 곱하기 2 효과)
    => >> : 오른쪽으로 shift(1회 연산시 나누기 2 효과)
    => 왼쪽 shift의 경우 무조건 왼쪽으로 밀고, 빈자리에 0을 채움
    => 오른쪽 shift의 경우 오른쪽으로 밀고, 빈자리에 첫번째 비트를 채움
    => >>> : 오른쪽으로 shift(빈자리에 무조건 0을 채움)
    => 32번 이상 shift 수행시 32로 나눈 나머지만큼 shift
    => ex) 7 << 1 = 14, 7 << 2 = 28  /  7 >> 1 = 3, 7 >> 2 = 1
    => 다른 언어의 경우 >>>는 없는 경우가 많고, 일반프로그래밍보다는 MS-Windows Programming과 같이 키보드            를 사용하는 프로그램에서 키에 기능을 부여할 때 사용하고, 이전의 Apple 문서에서 종종 이용

       일련번호(0,1,2,3...)는 같이 사용 X(ex - a, b, c ...) / 지수승(1,2,4,8...)일 경우 같이 사용 O(ex - ctrl, alt, shift...)

5. 관계(비교) 연산자
    => 연산의 결과를 boolean(true, false)으로 리턴하는 연산자
  1) >, >=, <, <= : 숫자 데이터에서만 사용할 수 있는 연산자
  2) ==, != : 모든 자료형의 데이터에 사용가능
    => 실수의 경우는 연산의 결과와 값을 직접비교하면 잘못된 결과를 리턴 할 수 있음( ex - 1.0 - 0.8 == 0.2 )
    => boolean과 숫자 데이터는 내용이 같은지 비교, 그 이외의 데이터는 저장하고 있는 hashcode(참조)가 같은지 비교
    => boolean, 숫자 데이터외의 데이터의 내용으로 비교할경우 equals 메소드 사용
    "Hello" == "Hello" : 이 경우 해시코드가 같은지 물어보는 것이기 때문에 false가 나올수도 있음
    "Hello".equals("Hello") : 저장하고 있는 곳의 내용이 같은지 확인 = true
     int[ ] ar = {100, 200} , int[ ] br = {100, 200}  / ar == br(false) , ar.equals(br)(true)
     == : 가리키는 곳이 같은지 비교
     equals 메소드 : 내용이 같은지 비교

    => 데이터를 분류할 때 1개만 저장하는 데이터인지 0개 이상을 저장하는 자료형인지 구분할수 있어야 함

6. 조건 논리 연산자
    => &&, || : boolean 데이터끼리 연산 후, 결과를 boolean으로 리턴하는 연산자
    => &&(and) : 2개 모두 true 일 때만 true를 리턴하고 그 이외의 경우는 false를 리턴
    => ||(or) : 2개 모두 false일 때만 false를 리턴하고, 그 이외의 경우는 true를 리턴

    => Don't Care
        - &&에서 앞의 조건이 false라면 뒤 조건 확인 X 
        - ||에서 앞의 조건이 true라면 뒤 조건 확인 X
        - 반복문 안에서 &&, || 사용시 순서를 생각하고 진행(최소한의 조건확인 절차를 진행하도록)

7. 비트논리 연산자
    => &, |, ^ : 정수 데이터에만 사용 가능
    => 정수를 2진수로 변환하여 비트 단위로 연산후 결과를 10진 정수로 리턴
    => &(and) :  둘다 1인 경우만 1이고, 나머지 경우는 0
    => |(or) : 둘다 0일 경우만 0이고, 나머지 경우는 1
    => ^(xor - Exclusive OR: 배타적 논리합) : 2개가 같은 경우는 0, 다른 경우는 1
         ex) 0^0 = 0, 0^1 = 1, 1^0 = 1, 1^1 = 0
    => System Programming, Graphic Programming, 데이터 분석, AI분야에서는 필수적으로 사용됨
    ex) 10 & 3 :
         00000000 00000000 00000000 00001010
         00000000 00000000 00000000 00000011

         00000000 00000000 00000000 00000010 => 2


  1) 활용
    => &연산 : 삭제, 키확인등에 사용됨 - 0을 넣으면 무조건 0)
    => |연산 : 복사, 숫자가 아닌 덧셈(색상 더하기) 등에 사용
    => ^연산 : 비교

'수업 정리' 카테고리의 다른 글

6일차 수업 정리  (0) 2020.04.13
5일차 수업 정리  (0) 2020.04.10
4일차 수업 정리  (0) 2020.04.09
2일차 수업 내용 정리  (0) 2020.04.07
1일차 수업 내용 정리  (0) 2020.04.06