안녕하세요.
C#에서 리터럴의 타입은 기본적으로 정수형(int)이나 실수형(double)일 수 있습니다. 그러나 리터럴의 타입을 명시적으로 지정할 수도 있습니다.
리터럴 타입과 변수 타입이 일치하지 않을 때, 일반적으로 형변환이 필요한데 이는 자동 형변환(암시적 형변환)이나 명시적 형변환을 사용하여 수행됩니다.
- long a = 1234; 이 경우, 리터럴은 int 타입이고 변수는 long 타입입니다. int에서 long으로의 형변환이 자동으로 일어나기 때문에 에러가 발생하지 않습니다.
- long a = 1234L; 이 경우, 리터럴은 long 타입이므로 이미 변수 타입과 일치합니다.
- float f = 12.34; 이 경우, 리터럴은 double 타입이고 변수는 float 타입입니다. double에서 float으로 형변환 시 정보 손실이 발생할 수 있으므로 명시적 형변환이 필요합니다.
- float f = 12.34F; 이 경우, 리터럴은 float 타입이므로 변수 타입과 일치합니다.
- byte b = 123; 이 경우, 리터럴은 int 타입이고 변수는 byte 타입입니다. byte의 허용 범위는 0 ~ 255이므로, 리터럴 값이 byte의 범위 내에 있기 때문에 자동으로 형변환되어 에러가 발생하지 않습니다.
C# 교과서 86 페이지에 보면, byte b = 256; 형태로 입력하면 에러가 납니다. 하지만, byte b = 123; 코드는 에러가 나지 않습니다.
결론적으로, 변수 선언부의 데이터 타입과 리터럴 타입이 항상 일치할 필요는 없습니다. 자동 형변환이 가능한 경우에는 암시적 형변환이 이루어질 수 있고, 그렇지 않은 경우 명시적 형변환을 사용하여 데이터 타입을 변환할 수 있습니다.
감사합니다.
On 2023-04-17 오후 10:20:00, '백동규' wrote:
교재에서 리터럴 부분을 공부하다가 질문이 있어서 문의드립니다.
정수형 리터럴은 int 실수형 리터럴은 double이 기본값이라
long a = 1234; (이 경우는 리터럴 int) 리터럴의 값이 형보다 작으므로 자동으로 형변환되어
변수에 저장되기 떄문에 에러 발생 하지 않음
long a = 1234L; (이 경우는 리터럴 long)
float f = 12.34(이 경우는 리터럴 double) 리터럴의 값이 float 보다 크므로 에러 발생 명시적 형변환 필요
float f = 12.34F(이 경우는 리터럴 float)
byte b = 123; (이 경우 리터럴 int) 리터럴의 값이 형보다 큰데 에러가 발생하지 않아서
질문 드립니다 왜 그런가요?
무조건 변수 선언부에 있는 데이터 타입과 리터럴 타입이 일치 해야하나요?