OS

Sign Extension

dm.kim 2023. 4. 19. 08:53

16진수 1칸(4bit) 표현은 2진수 4칸(4bit)으로 표현

16진수 2칸(8bit)은 1byte

따라서 32bit 프로세서는 2진수 32칸, 16진수 8칸/64bit 프로세서는 2진수 64칸, 16진수 16칸


현재 컴퓨터는 부호 있는 수는 2의 보수로 표현, 부호 없는 수는 1의 보수로 표현

0시작→양수

1시작→음수

int a=-2이고 unsigned int b=1일때 long c=a+b 계산 결과 값은 부호 unsigned 자료형 int인 -1

이는 32bit 16진수로 표현하면 FFFF FFFF


이 결과값이 long 타입 c에 대입되게 되는데 long이

32bit일때는 FFFF FFFF 그대로

64bit일때는 기존의 결과값이 unsigned였기에 zero extension이 일어나게 되고 16진수로 표현하면 0000 0000 FFFF FFFF가 됨

하지만 c가 signed long 타입이기에 해당 라인이 끝나게 될 때 c의 값은 signed long 64bit 0000 0000 FFFF FFFF가 됨


다음으로 long long d=c; 일때도 c가 32bit였는지 64bit(llp64, lp64 둘 다)였는지에 따라 결과값이 달라짐

c가 32bit일때는 FFFF FFFF에 sign extension이 일어나 16진수 FFFF FFFF FFFF FFFF가 됨

1로 시작하면 음수이기에 이 때 결과값은 -1

c가 64bit일때는 16진수 0000 0000 FFFF FFFF로 sign extension이 일어나 앞부호가 0으로 시작하면 양수이기에 해당 결과값은 4,294,967,295가 됨

'OS' 카테고리의 다른 글

32-bit와 64-bit 컴퓨터 차이  (0) 2022.04.05
메모리 구조  (0) 2020.10.09
MSB, LSB  (1) 2020.10.09
Interent과 Web의 차이점  (0) 2020.09.26