다음을 통해 공유


부호 있는 정수 계열 형식에서 변환

부호 있는 정수를 크기가 같거나 더 큰 부호 없는 정수로 변환하는데 부호 있는 정수의 값이 음수가 아니면 값이 변경되지 않습니다. 변환은 부호 있는 정수를 부호 확장하여 수행됩니다. 부호 있는 정수는 상위 비트를 잘라 더 짧은 부호 있는 정수로 변환됩니다. 결과는 이 예제에서 볼 수 있는 것과 같이 부호 없는 값으로 해석됩니다.

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로 부호 확장(shortunsigned short로 변환)

char

unsigned long

long으로 부호 확장(long을 unsigned long으로 변환)

char

float

long으로 부호 확장(longfloat로 변환)

char

double

long으로 부호 확장(longdouble로 변환)

char

long double

long으로 부호 확장(longdouble로 변환)

short

char

하위 바이트 유지

short

long

부호 확장

short

unsigned char

하위 바이트 유지

short

unsigned short

비트 패턴 유지(상위 비트가 부호 비트로의 기능을 잃음)

short

unsigned long

long으로 부호 확장(long을 unsigned long으로 변환)

short

float

long으로 부호 확장(longfloat로 변환)

short

double

long으로 부호 확장(longdouble로 변환)

short

long double

long으로 부호 확장(longdouble로 변환)

long

char

하위 바이트 유지

long

short

하위 단어 유지

long

unsigned char

하위 바이트 유지

long

unsigned short

하위 단어 유지

long

unsigned long

비트 패턴 유지(상위 비트가 부호 비트로의 기능을 잃음)

long

float

float으로 표시. long을 정확히 나타낼 수 없는 경우 일부 정밀도가 손실됩니다.

long

double

double로 표시. longdouble로 정확히 나타낼 수 없는 경우 일부 정밀도가 손실됩니다.

long

long double

double로 표시. longdouble로 정확히 나타낼 수 없는 경우 일부 정밀도가 손실됩니다.

1. 모든 char 항목에서는 char 형식에 기본적으로 부호가 있다고 간주됩니다.

Microsoft 전용

Microsoft 32비트 C 컴파일러의 경우 정수는 long과 동일합니다. int 값의 변환은 long과 동일하게 진행됩니다.

Microsoft 전용 종료

참고 항목

개념

할당 변환