연산자
연산자와 피연산자
- 연산자: 연산을 수행하는 기호 >> 모든 연산자는 연산결과를 반환한다.
( 괄호는 연산자아님) - 피연산자: 연산자의 연산 수행 대상(x,3 …)
연산자의 종류
(비트연산자는 무시하기)
- (type): 형변환
- ? 3형 연산자
연산자 우선순위
- 연산자가 둘 이상있을때 어떤 연산을 먼저 수행할지 자동 결정하는것
- 아래 우선 순위 외우기(!!!) == 상식적임
- 부호 연산자는 1항연산자이므로 2항 연산자보다 먼저 계산됨
- 대입 연산자는 왼쪽에 있는 모든 계산를 끝나고 변수에 대입하는것으로 우선순위가 낮다
- 대입과 단항 연산자를 제외하면, 모두 왼쪽 →오른쪽 연산됨!!!!
- 모든 연산결과를 연산결과를 반환한다.
- 산술>비교>논리>대입로 우선순위를 가짐
- 단항(피연산자1개) > 이항(피연산자2개 > 삼항 (피연산자3개) 로 우선순위가짐
- 단항과 대입을 제외한 모든 연산의 진행방향은 왼쪽 → 오른쪽임
증감 연산자 & 부호 연산자
증감연산자 (단항연산자)
- 증감 연산자 (++) 피연산자의 값을 1 증가시킨다
- 감소 연산자(- -) 피연산자의 값을 1 감소시킨다
- 전위형 후위형 뜻
1 | j = ++i; //전위형 |
부호 연산자(단항연산자)
- - 는 피연산자의 부호를 반대로 변경
- 사용안함
형변환 연산자
형변환이란
- 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
- (타입) 피연산자
- 기존 피연산자의 타입은 당연히 변하지않는다. 읽어온후 타입변경하여 반환
- 아래 예시 특성 알아두기
자동 형변환
- 원래는 대입 연산자의 양쪽의 타입이 같이야함.
- 틀린데, 범위가 더 크다면, 알아서 자동 형변환 해줌
- 즉, 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다.
1 | float f = 1234; // float 타입 변수에 int타입 리터릴 저장>> 형변환 생략 |
- 자동 형변환 되는 볌위 관계도
- long보다 float가 가능한 이유는 float가 지수를 활용하는 기록방법으로
10^19까지인 long 보다 10^38까지 표현가능한 float이 범위가 더 높다 - 예외)로 int리터럴을 byte,short타입변수로 저장 할때는 당연히 범위포함된다면 들어감…이미 값손실 안일어나는것을 컴파일러가 알고있음..
- 리터럴이 아닌 int 변수로 넣게된다면 컴파일러가 int 변수에 대해byte타입변수는 값손실이 확실하므로 에러가남
사칙 연산자
- 같은 타입만 계산 가능하고, 결과도 같은 타입으로 나온다
- int 10 / int 4 ⇒ int 2 가 나옴…
- 한쪽이라도 float으로 계산해야 나머지를 모두 범위큰 float로 자동 형변환후 계산함
산술 변환(!!!)
연산 전에 피연산자의 타입을 일치시키는 것
규칙
두 피연산자의 타입을 같게 일치시킨다(보다 큰 타입으로 일치)
피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
(연산하기범위가너무 작아서 오버플로우 피하기위해 int로 해버림)
1 | int a= 1_000_000; |
Math.round()반올림, 나머지 연산자
Math.round()
- 실수를 소수점 첫 째자리에서 반올림한 정수를 반환
- 만약 둘째자리 이상을 반올림하고싶다면 10^N을 곱하여 함수대입후 10^N으로나눔
Math.round()가 int반환하여 결국 int / int 는 int이므로 소수점 안나옴
1000.0 double타입으로 나눠줘야 결과값나옴
형변환 연산자로 값손실 이용하여 내림 만들기
1 | double a = 3.141592; //3.141 만 얻으려면? |
나머지 연산자 %
- 오른쪽 피연산자로 나누고 남은 나머지를 반환
- 피연산자는 정수만됨( 부호는 무시됨)
- / 몫 반환, %나머지 반환
비교연산자
문자열의 비교
- 문자열 비교에는 == 대신 equals()를 사용해야한다
- 의도하지 않은 false가 나올수도있으므로
논리 연산자와 논리 부정 연산자
- 조건식을 연결할 때 사용하는 연산자
- || OR결합 : 어느 한쪽만 true면 true반환
- && AND결합 : 둘다 true여야 true반환 (&&가 우선순위가 더 높아서… 괄호필요)
1 | // 예시 |
논리 부정 연산자(단항연산자) ← 연산방향
- ! : true를 false로 바꾸고 false를 true로 바꿈
- !!true이라면, 안쪽 !처리후 밖에 !처리됨
조건연산자 & 대입연산자
조건연산자(3항 연산자)
- ? : 조건식의 결과에 따라 연산 결과를 잘리 한다
대입 연산자(왼←오 로 연산방향)
- = : 오른쪽 피연산자를 왼쪽 피연산자에 저장후 저장된 값을 반환
1 | int a; |
- = 기준으로 왼쪽은 lvalue , 오른쪽은 rvalue
- 특히, 왼쪽은 저장공간(변수, 배열)이 와야함으로 이외의것은 에러
복합 대입 연산자
- 대입 연산자와 다른 연산자를 하나로 축약
- 맨 마지막 외우기.(괄호가 생각됨을주의)