부호 없는 정수 계열 형식에서 변환Conversions from Unsigned Integral Types

부호 없는 정수는 상위 비트를 잘라 더 짧은 부호 없는 정수 또는 부호 있는 정수로 변환되거나 0 확장을 통해 더 긴 부호 없는 정수 또는 부호 있는 정수로 변환됩니다(부호 없는 정수 계열 형식에서 변환 표 참조).An unsigned integer is converted to a shorter unsigned or signed integer by truncating the high-order bits, or to a longer unsigned or signed integer by zero-extending (see the Conversions from Unsigned Integral Types table).

정수 계열 형식의 값이 더 작은 크기의 부호 있는 정수로 강등되거나 부호 없는 정수가 해당 부호 있는 정수로 변환될 때 값을 새 형식으로 표현할 수 있으면 값이 변경되지 않습니다.When the value with integral type is demoted to a signed integer with smaller size, or an unsigned integer is converted to its corresponding signed integer, the value is unchanged if it can be represented in the new type. 그러나 다음 예제와 같이 부호 비트가 설정된 경우 나타내는 값이 변경됩니다.However, the value it represents changes if the sign bit is set, as in the following example.

int j;  
unsigned short k = 65533;  

j = k;  
printf_s( "%hd\n", j );   // Prints -3  

값을 표현할 수 없는 경우 결과는 구현 시 정의됩니다.If it cannot be represented, the result is implementation-defined. Microsoft C 컴파일러의 정수 강등 처리에 대한 자세한 내용은 형식 캐스팅 변환을 참조하세요.See Type-Cast Conversions for information on the Microsoft C compiler's handling of demotion of integers. 정수를 변환하거나 형식 캐스팅해도 같은 동작이 발생합니다.The same behavior results from integer conversion or from type casting the integer.

부호 없는 값은 해당 값을 유지하고 C에서 직접 표현할 수 없는 방식으로 변환됩니다. 유일한 예외는 unsigned long에서 float로의 변환입니다. 여기서는 하위 비트 정도만 손실됩니다.Unsigned values are converted in a way that preserves their value and is not representable directly in C. The only exception is a conversion from unsigned long to float, which loses at most the low-order bits. 그렇지 않으면 값이 유지되거나 서명 또는 서명되지 않습니다.Otherwise, value is preserved, signed or unsigned. 정수 계열 형식의 값이 부동으로 변환되고 해당 값이 표현할 수 있는 범위를 벗어난 경우 결과가 정의되지 않습니다.When a value of integral type is converted to floating, and the value is outside the range representable, the result is undefined. 정수 계열 및 부동 소수점 형식의 범위에 대한 자세한 내용은 기본 형식 저장을 참조하세요.(See Storage of Basic Types for information about the range for integral and floating-point types.)

다음 표에서는 부호 없는 정수 계열 형식으로부터의 변환을 요약하여 보여 줍니다.The following table summarizes conversions from unsigned integral types.

부호 없는 정수 계열 형식에서 변환Conversions from Unsigned Integral Types

시작From To 메서드Method
unsigned char char 비트 패턴 유지(상위 비트가 부호 비트가 됨)Preserve bit pattern; high-order bit becomes sign bit
unsigned char shortshort 0 확장Zero-extend
unsigned char longlong 0 확장Zero-extend
unsigned char unsigned shortunsigned short 0 확장Zero-extend
unsigned char unsigned long 0 확장Zero-extend
unsigned char floatfloat long으로 변환(longfloat로 변환)Convert to long; convert long to float
unsigned char doubledouble long으로 변환(longdouble로 변환)Convert to long; convert long to double
unsigned char long double long으로 변환(longdouble로 변환)Convert to long; convert long to double
unsigned shortunsigned short char 하위 바이트 유지Preserve low-order byte
unsigned shortunsigned short shortshort 비트 패턴 유지(상위 비트가 부호 비트가 됨)Preserve bit pattern; high-order bit becomes sign bit
unsigned shortunsigned short longlong 0 확장Zero-extend
unsigned shortunsigned short unsigned char 하위 바이트 유지Preserve low-order byte
unsigned shortunsigned short unsigned long 0 확장Zero-extend
unsigned shortunsigned short floatfloat long으로 변환(longfloat로 변환)Convert to long; convert long to float
unsigned shortunsigned short doubledouble long으로 변환(longdouble로 변환)Convert to long; convert long to double
unsigned shortunsigned short long double long으로 변환(longdouble로 변환)Convert to long; convert long to double
unsigned long char 하위 바이트 유지Preserve low-order byte
unsigned long shortshort 하위 단어 유지Preserve low-order word
unsigned long longlong 비트 패턴 유지(상위 비트가 부호 비트가 됨)Preserve bit pattern; high-order bit becomes sign bit
unsigned long unsigned char 하위 바이트 유지Preserve low-order byte
unsigned long unsigned shortunsigned short 하위 단어 유지Preserve low-order word
unsigned long floatfloat long으로 변환(longfloat로 변환)Convert to long; convert long to float
unsigned long doubledouble double로 직접 변환Convert directly to double
unsigned long long double long으로 변환(longdouble로 변환)Convert to long; convert long to double

Microsoft 전용Microsoft Specific

Microsoft 32비트 C 컴파일러의 경우 unsigned int 형식은 unsigned long 형식과 동일합니다.For the Microsoft 32-bit C compiler, the unsigned int type is equivalent to the unsigned long type. unsigned int 값의 변환은 unsigned long의 변환과 동일하게 진행됩니다.Conversion of an unsigned int value proceeds in the same way as conversion of an unsigned long. 변환되는 값이 최대 양의 부호 있는 long 값보다 더 큰 경우 unsigned long 값에서 float로의 변환이 정확하지 않습니다.Conversions from unsigned long values to float are not accurate if the value being converted is larger than the maximum positive signed long value.

Microsoft 전용 종료END Microsoft Specific

참고 항목See Also

할당 변환Assignment Conversions