-
[C] Integer Promotion(암시적 형변환) - "char to unsigned int"컴퓨터과학/시스템프로그래밍 2022. 10. 19. 01:10
In C, integers of smaller types(char, short) are automatically promoted to integers before evaluated.
C언어에서는 int(4byte)보다 작은 정수형 자료형들(char, short)이 사용(evaluated)되기 전에, 미리 int형(4byte)크기만큼 늘어난다. 늘어나는 과정에서는 sign extension이 발생한다.
여기서 사용(evaluate)이란, printf와 같은 출력 명령이나 ==와 같은 비교연산 등에 해당 자료형들이 이용되는 경우를 말한다.
위의 코드에서 변수 c는 char형으로 1byte(8bit)의 크기를 갖는다. 위의 0xff는 16진수로, 2진수로 바꾸면 1111 1111이 된다.
i = (unsigned int) c; 에서 c가 unsigned int형으로 바뀌기 전에 먼저 sign extension이 일어나 비트 크기가 int 크기만큼 늘어난 다음 unsigned int 형으로 변환된다.
이 과정이 Integer Promotion이다.
char(1byte)형이 int(4byte)로 형변환 되는 과정에서 sign extension이 일어나게 되는데,
0xff(1111 1111)이 0xff ff ff ff(1111 ... 1111)로 변하게 된다.
그 후 이 int가 unsigned int형으로 type casting된다.
type casting시 이진수 비트 자체는 변하지 않는다. 십진수 해석만 달라질 뿐.
잘 이해가 안되면 "signed unsigned conversion"을 검색해 보는것도 좋을 것 같다.
'컴퓨터과학 > 시스템프로그래밍' 카테고리의 다른 글
[Assembly] movslq 명령어(movslq instruction) (2) 2022.10.18