부호 있는 정수 계열 형식에서 변환
부호 있는 정수를 크기가 같거나 더 큰 부호 없는 정수로 변환하는데 부호 있는 정수의 값이 음수가 아니면 값이 변경되지 않습니다. 변환은 부호 있는 정수를 부호 확장하여 수행됩니다. 부호 있는 정수는 상위 비트를 잘라 더 짧은 부호 있는 정수로 변환됩니다. 결과는 이 예제에서 볼 수 있는 것과 같이 부호 없는 값으로 해석됩니다.
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
long int 또는 unsigned long int 값을 float 값으로 변환할 때 정밀도가 다소 손실될 수 있다는 점을 제외하면 부호 있는 정수를 부동 값으로 변환할 때 아무 정보도 손실되지 않습니다.
다음 표에서는 부호 있는 정수 계열 형식으로부터의 변환을 요약하여 보여 줍니다. 이 표에서는 char 형식에 기본적으로 부호가 있다고 간주됩니다. 컴파일 타임 옵션을 사용하여 char 형식의 기본값을 unsigned로 변경할 경우 다음 표인 "부호 있는 정수 계열 형식에서 변환" 대신 unsigned char 형식에 대한 부호 없는 정수 계열 형식에서 변환 표에 나와 있는 변환이 적용됩니다.
부호 있는 정수 계열 형식에서 변환
전 |
후 |
메서드 |
---|---|---|
char1 |
short |
부호 확장 |
char |
long |
부호 확장 |
char |
unsigned char |
패턴 유지(상위 비트가 부호 비트로의 기능을 잃음) |
char |
unsigned short |
short로 부호 확장(short를 unsigned short로 변환) |
char |
unsigned long |
long으로 부호 확장(long을 unsigned long으로 변환) |
char |
float |
long으로 부호 확장(long을 float로 변환) |
char |
double |
long으로 부호 확장(long을 double로 변환) |
char |
long double |
long으로 부호 확장(long을 double로 변환) |
short |
char |
하위 바이트 유지 |
short |
long |
부호 확장 |
short |
unsigned char |
하위 바이트 유지 |
short |
unsigned short |
비트 패턴 유지(상위 비트가 부호 비트로의 기능을 잃음) |
short |
unsigned long |
long으로 부호 확장(long을 unsigned long으로 변환) |
short |
float |
long으로 부호 확장(long을 float로 변환) |
short |
double |
long으로 부호 확장(long을 double로 변환) |
short |
long double |
long으로 부호 확장(long을 double로 변환) |
long |
char |
하위 바이트 유지 |
long |
short |
하위 단어 유지 |
long |
unsigned char |
하위 바이트 유지 |
long |
unsigned short |
하위 단어 유지 |
long |
unsigned long |
비트 패턴 유지(상위 비트가 부호 비트로의 기능을 잃음) |
long |
float |
float으로 표시. long을 정확히 나타낼 수 없는 경우 일부 정밀도가 손실됩니다. |
long |
double |
double로 표시. long을 double로 정확히 나타낼 수 없는 경우 일부 정밀도가 손실됩니다. |
long |
long double |
double로 표시. long을 double로 정확히 나타낼 수 없는 경우 일부 정밀도가 손실됩니다. |
1. 모든 char 항목에서는 char 형식에 기본적으로 부호가 있다고 간주됩니다.
Microsoft 전용
Microsoft 32비트 C 컴파일러의 경우 정수는 long과 동일합니다. int 값의 변환은 long과 동일하게 진행됩니다.
Microsoft 전용 종료