Saturday, February 03, 2007
C언어] -1 (마이너스 1) 을, 16진수 헥사(Hex)로 표현하면?
-1 (마이너스 1) 을 16진수로 바꾸면, 자료형의 종류에 따라, FF 나 FFFFFFFF 등의 값을 가지게 됩니다.
윈도우 계산기에서는 FF 로 나오지만, C의 32비트 정수(int)에서는 FFFFFFFF 라는 값이 나옵니다.
"32비트 정수(int)"에서의 -1과, "부호 없는, 32비트 정수(unsigned int)"에서의 4294967295 는, 십육진수인 FFFFFFFF 로 똑같이 표현됩니다.
unsigned int 는 음수를 표현할 수 없고, 그 대신 음수를 표현할 메모리를 양수 쪽으로 몰아주어서, 숫자 표현 범위를 플러스 방향으로 2배 확장시킨 것이기 때문입니다.
참고: ▶▶ C언어] 정수 실수 종류(자료형;데이터형), 최소값 최대값; char int float, Data Type Ranges
윈도우 계산기에서는 FF 로 나오지만, C의 32비트 정수(int)에서는 FFFFFFFF 라는 값이 나옵니다.
"32비트 정수(int)"에서의 -1과, "부호 없는, 32비트 정수(unsigned int)"에서의 4294967295 는, 십육진수인 FFFFFFFF 로 똑같이 표현됩니다.
unsigned int 는 음수를 표현할 수 없고, 그 대신 음수를 표현할 메모리를 양수 쪽으로 몰아주어서, 숫자 표현 범위를 플러스 방향으로 2배 확장시킨 것이기 때문입니다.
#include <stdio.h>
int main(void) {
int i;
unsigned int ui;
i = -1;
printf("%X\n", i);
// 출력 결과: FFFFFFFF
i = -2;
printf("%X\n", i);
// 출력 결과: FFFFFFFE
ui = 4294967295; // unsigned int의 최대값
printf("%X\n", ui);
// 출력 결과: FFFFFFFF
i = 2147483647; // int 의 최대값
printf("%X\n", i);
// 출력 결과: 7FFFFFFF
return 0;
}
int main(void) {
int i;
unsigned int ui;
i = -1;
printf("%X\n", i);
// 출력 결과: FFFFFFFF
i = -2;
printf("%X\n", i);
// 출력 결과: FFFFFFFE
ui = 4294967295; // unsigned int의 최대값
printf("%X\n", ui);
// 출력 결과: FFFFFFFF
i = 2147483647; // int 의 최대값
printf("%X\n", i);
// 출력 결과: 7FFFFFFF
return 0;
}
참고: ▶▶ C언어] 정수 실수 종류(자료형;데이터형), 최소값 최대값; char int float, Data Type Ranges
tag: cpp
C언어 | C/C++ (Visual C++) 프로그래밍
<< Home