본문 바로가기

ETC Programmings

상수와 기본 자료형 ② 상수와 형변환

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
후후... 2탄입니다.. 다음으로 나오는 개념이 '리터럴 상수' 라는 놈인데요.. 별거 없습니다. -_-;;

int a = 30 + 22;
int b = a + 16;

이라는 소스코드가 있다면 여기서 쓰인 리터럴 상수는 총 3개 입니다. 왜냐 -_-? 무슨 근거로 그러는거냐? 리터럴 상수라는 놈은 특별한 변수명이 없는 상수를 이야기 합니다. 그니까.. a 나 b처럼 변수 명이 정해져 있지 않은 상수를 의미하는 겁니다.. 그러니 30이나 22, 16같은 놈은 특별히 상수명을 지정해 주지 않았으니까.. 저런놈들이 리터럴 상수라는 겁니다..

그러면 이름을 가진 상수는 뭐라고 하냐? 심볼릭 상수 라고하네요 -ㅅ-;; 그러니까.. 자바에서는..

final int a = 18;
이 처럼 final 이라는 키워드를 사용하여.. 상수를 표시했었죠? C에서는 final 이라는 키워드 대신 const 라는 키워드를 사용하여 상수임을 선언해줍니다.. 이 상수는 자바 역시도 그렇듯이.. 선언과 동시에 초기화 해줘야 됩니다. 에.. 그리고니까.. 이런 경우죠..

const int MAX;
MAX = 100;
// 이런건 컴파일 에러나효..

const int MAX = 100;
// 이렇게 해야 안나효..
좀 더 명료해 졌습니다.. 후후..;;

다음으로 나오는게.. 형변환.. Type Casting 이라는 거죠.. 자바에서 배우길.. 형변환은 작은녀석을 큰녀석으로 변환시킬 수 있다.. 는 것이었습니다. -_- 후.. 이것도 그림으로 한번 나타내 볼가요? 그림 없는 공부는 공부가 아니죠.. 머릿속으로 생각한걸 표현해 내야 합니다!!!! (괜히 오바;;)

이렇게 데이터의 크기의 관계가 형성이 됩니다..

사용자 삽입 이미지
음.. char 형의 데이터는 long의 데이터 형으로 변환이 가능하고 long이나 int는 float 형으로 변환할 수 있고.. float 형은 또 double 형으로 변환이 가능합니다.. 그리고.. 이런 규칙에 위배되면.. 컴파일 에러나.. Exception 이 발생했습니다. ClassCastException 같은 ㅠㅠ  몰라 뭐야 그거.. 무서워...

여튼.. C에서 에러가 나겠죠 뭐..... 라고 하기엔 뭔가 책 내용도 수상하고... -_- 그래서 해봤습니다!! 역발상!!

사용자 삽입 이미지

후덜덜;;; 됩니다.. -56 이라는 아스트랄한 숫자가 나오긴 했지만.. -_- 됩니다.. 되요.. 이런경우를 자동 형변환이라고 한답니다.. 후덜덜.. 걍 형변환을 시켜주긴 하는데.. int 는 4바이트 이고 char는 1바이트 아닙니까..? 음.. 이상황에서는 앞에 3바이트를 짤라버리고 1바이트만 취해서 char 형으로 변신 시켜주는겁니다.. 그리고 MSB 도 생기니.. MSB 부분이 1이면 음수가 되어버리겠죠.. 위에 200을 char 형으로 바꾸면 MSB 부분이 1이 되는가봅니다.

여튼.. C는 참 독특하군요.. -_-.. 자바만 했으면 클랐뻔했습니다;;