벌써 하루 늦었다…반성한다.
CH 3. 연산자
1. 연산자
1.1. 연산자와 피연산자
-연산자: 연산을 수행하는 기호
-피연산자: 연산자의 작업 대상
-연산자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환한다.
1.2. 식과 대입연산자
-연산자와 피연산자를 조합하여 계산하고자하는 바를 표현하는 것을 식이라 한다.
-식을 계산하여 결과를 얻는 것을 식을 평가한다고 한다.
-결과 저장하려면 대입 연산자 사용해야 한다.
1.3. 연산자의 종류
-기능별 분류: 산술, 비교, 논리, 대입, 기타
-피연산자의 개수에 따른 분류: 단항, 이항, 삼항
1.4. 연산자의 우선순위와 결합규칙
-대부분 상식선에서 해결 가능
-연산자의 결합규칙: 단항 연산자와 대입 연산자 제외 왼쪽에서 오른쪽으로 연산 수행
-우선순위
● 산술 > 비교> 논리> 대입. 대입은 제일 마지막에 수행된다.
● 단항 > 이항> 삼항. 단항 연산자의 우선순위가 이항 연산자보다 높다.
● 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
1.5. 산술 변환
-피연산자의 타입이 서로 다르다면 연산 전에 형변환 연산자로 타입을 일치시켜야 한다.
-작은 타입에서 큰 타입으로 형변환하는 경우, 자동적을 형변환됨.
-연산 직전에 발생하는 자동 형변환: 일반 산술 변환
● 두 피연산자의 타입을 길게 일치시킨다. (보다 큰 타입으로 일치)
● 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
-연산 결과의 타입은 피연산자의 타입과 일치한다. (나눗셈 시 유의)
2. 단항 연산자
2.1. 증감 연산자 ++ —
-지정된 값을 1 증가 또는 감소
-정수와 실수는 모두 가능하지만 상수는 불가
-오직 증감 연산자와 대입 연산자만 피연산자의 값을 변경한다.
-++j : 전위형, j++: 후위형
-독립적인 하나의 문장으로 쓰인 경우에는 전위형과 후위형의 차이가 없다.
-식에 두 번 이상 포함된 변수에 증가연산자를 사용하는 것은 피해야 한다.
2.2. 부호 연산자 + –
-피연산자의 부호를 반대로 변경한 결과
-boolean과 char를 제외한 기본형에만 사용 가능
3. 산술 연산자
3.1. 사칙 연산자 + – * /
-초딩 때 배운 것들
-int 타입은 소수점을 저장하지 못하므로 정수만 남고 소수점 이하는 버려짐. 반올림 아님.
-피연산자가 정수형일 경우 0으로 나누면 실행 시 오류 발생, 부동 소수점값인 0.0f로 나눌 경우 결과값 infinity 나옴.
-큰 자료형의 값을 작은 자료형의 변수에 저장하려면 명시적으로 형변환 연산자를 사용해서 변환해야 한다.
-피연산자로 숫자뿐만 아니라 문자도 가능.
-char c2 = ‘a’ + 1; –> OK: 리터럴 간의 연산이기 때문. 리터럴 간의 연산은 컴파일러가 미리 연산 수행함.
3.2. 나머지 연산자 %
-나누는 수는 0을 사용할 수 없고 정수만 허용.
-음수도 허용되지만 나머지 연산을 한 결과에 왼쪽 피연산자의 부호를 붙이면 된다.
4. 비교 연산자
-연산 결과는 오직 true와 false 둘 중의 하나
4.1. 대소비교 연산자 < > <= >=
-boolean형을 제외한 나머지 자료형에서 사용 가능, 참조형은 사용 불가
4.2. 등가비교 연산자 == !=
-기본형과 참조형에서 사용 가능
-형변환 통해 두 피연산자 타입을 같게 맞춘 다음 비교
-실수형은 근사값으로 저장되므로 오차 발생 가능 –> 0.1 == 0.1f (false)
● 타입의 값을 float타입으로 형변환 다음에 비교
● 어느 정도의 오차는 무시하고 두 타입의 값을 앞에서 몇 자리만 잘라서 비교.
-문자열의 비교시에는 equals() 메서드 쓰는 게 좋다
● ==로 비교시 내용은 같지만 다른 객체라면 false 반환
● equals() 메서드 사용시 다른 객체더라도 내용 같다면 true 반환
5. 논리 연산자
-둘 이상의 조건을 그리고(AND)나 또는(OR)으로 연결하여 하나의 식으로 표현할 수 있게 함.
5.1. 논리 연산자 – && || !
-&&가 ||보다 우선순위가 높다.
-효율적인 연산이 가능하다.
-논리 부정 연산자 !: true면 false 반환, false면 true 반환
5.2. 비트 연산자 & | ^ ~ << >>
-피연산자를 비트 단위로 논리 연산한다.
-^연산자는 두 번 연산하면 원래의 값으로 돌아옴
-비트 연산에서도 산술 변환 일어남.
-비트 전환 연산자 ~: 1의 보수 연산자
● 양의 정수 p가 있을 때 음의 정수 얻으려면 ~p+1 하면 됨.
● 물론 부호 연산자 – 쓰면 끝.
-쉬프트 연산자 << >>
● x << n == x * 2^n
● x >> n == x / 2^n
● n의 값이 자료형의 bit수보다 크다면 자료형으로 bit수로 나눈 나머지만큼만 이동한다.
● 속도 빠름
6. 그 외의 연산자
6.1. 조건 연산자 ? :
-삼항 연산자
-가독성이 떨어지므로 꼭 필요한 경우에 한번 정도만 사용.
-조건식 ? 식1 : 식2
-산술 변환 발생
6.2. 대입 연산자 = op=
-저장공간에 값 또는 수식의 연산결과를 저장하는데 사용.
-lvalue는 반드시 변수처럼 값을 변경할 수 있는 것이어야 한다.
-복합 대입 연산자: 다른 연산자와 결합하여 사용.