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

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

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 short로 부호 확장(longunsigned 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 short로 부호 확장(longunsigned 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 전용 종료

참고 항목

할당 변환