[Java의 정석]Chapter3.연산자(07~09)
Chapter 3. 연산자
07. 형변환 연산자
- 다른 타입간의 연산을 수행하는 경우 수행 전 타입을 일치시켜야 함
형변환
: 변수나 리터럴(상수)의 타입을 다른 타입으로 변환하는 것- 형변환 방법 : 형변환하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여줌 ▶
(타입)피연산자
괄호()
는 '캐스트 연산자' 또는 '형변환 연산자'라고 하며, 형변환을 '캐스팅(casting)'이라고도 함.
ex)
double d = 85.4;
int score = (int)d;
연산과정 :
int score = (int)d; → int score = (int)85.4; → int score = 85;
- 형변환 연산자는 그저 피연산자의 값을 읽어서 지정된 타입으로 형변환하고 결과를 반환할 뿐 피연산자인 변수 값에는 아무런 변화가 없음
변환 | 수식 | 결과 |
---|---|---|
int→char | (char)65 | 'A' |
char→int | (int)'A' | 65 |
float→int | (int)1.6f | 1 |
int→float | (float)10 | 10.0f |
08. 자동 형변환
- 경우에 따라 편의상의 이유로 형변환 생략 가능
- 그렇다고 형변환이 이루어지지 않는 것은 아니고, 컴파일러가 생략된 형변환을 자동적으로 추가해줌
🍕 float f = 1234; //OK
float f = (float)1234;에서 (float)가 생략. 에러 없음
🍕 byte b = 1000; //에러
byte타입의 범위(-128~127)를 벗어난 값의 대입
▶변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우 형변환을 생략하면 에러 발생
▶에러메시지incompatible types:possible lossy conversion from int to byte
: 큰 타입에서 작은 타입으로의 형변환은 값 손실이 발생할 수 있다는 뜻
🍕 byte b = (byte)1000; //OK
그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨
▶ 큰 타입에서 작은 타입으로 명시적인 형변환 해줬을 경우, 형변환이 프로그래머의 의도적인 것으로 간주하여 컴파일러는 에러를 발생시키지 않음
🚩 형변환을 생략하면 컴파일러가 자동적으로 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다
✅형변환이 가능한 7개의 기본형을 왼쪽부터 오른쪽으로 표현할 수 있는 값의 범위가 작은 것부터 큰 것의 순서로 나열
✅왼쪽에서 오른쪽으로의 변환은 형변환 연산자를 사용하지 않아도 자동 형변환되며, 반대 방향으로의 변환은 반드시 형변환 연산자 입력 필수
09. 사칙 연산자
- 사칙 연산자 : 덧셈
+
뺄셈-
곱셉*
나눗셈/
그리고, 나머지%
- 곱셉
*
나눗셈/
나머지%
연산자가 덧셈+
뺄셈-
연산자보다 우선순위가 높으므로 먼저 처리 - 피연산자가 정수인 경우, 나누는 수로 0 사용 불가. 실행시 에러 발생
- 10을 4로 나눈 결과가 2 : 나누기 연산자의 두 피연산자가 모두 int타입인 경우 연산결과 역시 int타입. 따라서 소수점 이하는 버려지며, 반올림이 발생하지 않음
- 올바른 연산결과를 얻기 위해 두 피연산자 중 한 쪽을 실수형으로 형변환 필요. 그래야 다른 한쪽도 같이 실수형으로 자동 형변환 되어 실수형의 값의 결과를 얻음
Author And Source
이 문제에 관하여([Java의 정석]Chapter3.연산자(07~09)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wendy1126/Java의-정석Chapter3.연산자0709저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)