확장 기호


오늘날의 컴퓨터는 부호 있는 숫자를 2의 보수로, 부호 없는 숫자를 1의 보수로 나타냅니다.

0start → 양수

1시작→음수

int a=-2이고 unsigned int b=1인 경우 계산 결과는 -1이며 부호 있는 부호 없는 데이터 유형 int입니다.

32비트 16진수로 표현하면 FFFF FFFF


1개의 16진수(4비트)는 4개의 2진수(4비트)로 표현됩니다.

2개의 16진수(8비트)는 1바이트입니다.

따라서 32비트 프로세서는 32개의 이진수를 가지며, 8개의 16진수/64비트 프로세서에는 64개의 2진수와 16개의 16진수가 있습니다.


이 결과 값은 long type c에 할당되지만 long

32비트용 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가 32비트인지 64비트인지(llp64와 lp64 모두) 결과 값이 다릅니다.

c가 32비트일 때 FFFF FFFF에서 부호 확장이 발생하여 16진수 FFFF FFFF FFFF FFFF가 됨

1부터 시작하면 음수이므로 결과는 -1입니다.

c가 64비트일 때 16진수 0000 0000 FFFF FFFF로 부호 확장이 발생하며 앞의 부호가 0으로 시작하면 양수이므로 결과는 4,294,967,295이다.