** 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 |