Conversioni dai tipi integrali senza segnoConversions from Unsigned Integral Types

Un Integer senza segno viene convertito in un Integer senza segno o con segno più breve troncando i bit più significativi oppure in un Integer senza segno o con segno più lungo mediante estensione con zeri (vedere la tabella Conversioni da tipi integrali senza segno).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).

Quando il valore con un tipo integrale viene abbassato di livello a un intero con segno di dimensione inferiore o un intero senza segno viene convertito nell'intero con segno corrispondente, tale valore rimane invariato se può essere rappresentato nel nuovo tipo.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. Tuttavia, il valore che esso rappresenta cambia se è impostato il bit di segno, come nell'esempio riportato di seguito.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  

Se non può essere rappresentato, il risultato è definito dall'implementazione.If it cannot be represented, the result is implementation-defined. Per informazioni sulla gestione dell'abbassamento di livello di un Integer nel compilatore C Microsoft, vedere Conversioni di cast di tipo.See Type-Cast Conversions for information on the Microsoft C compiler's handling of demotion of integers. Lo stesso comportamento deriva dalla conversione di un intero o da un tipo che esegue il cast dell'intero.The same behavior results from integer conversion or from type casting the integer.

I valori senza segno vengono convertiti in modo da mantenerne il valore e non sono direttamente rappresentabili in C. L'unica eccezione è una conversione da unsigned long a float, che perde al massimo i bit meno significativi.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. In caso contrario, il valore viene mantenuto, sia esso con segno che senza segno.Otherwise, value is preserved, signed or unsigned. Quando un valore di tipo integrale viene convertito in un valore a virgola mobile e il valore non è compreso nell'intervallo rappresentabile, il risultato non è definito.When a value of integral type is converted to floating, and the value is outside the range representable, the result is undefined. Per informazioni sull'intervallo dei tipi a virgola mobile e integrali, vedere Archiviazione di tipi di base.(See Storage of Basic Types for information about the range for integral and floating-point types.)

Nella tabella seguente sono riepilogate le conversioni dai tipi integrali senza segno.The following table summarizes conversions from unsigned integral types.

Conversioni dai tipi integrali senza segnoConversions from Unsigned Integral Types

DaFrom PerTo MetodoMethod
unsigned char char Viene mantenuto lo schema di bit; il bit più significativo diventa il bit di segnoPreserve bit pattern; high-order bit becomes sign bit
unsigned char shortshort Estensione zeroZero-extend
unsigned char longlong Estensione zeroZero-extend
unsigned char unsigned shortunsigned short Estensione zeroZero-extend
unsigned char unsigned long Estensione zeroZero-extend
unsigned char floatfloat Convertire a long; convertire long a floatConvert to long; convert long to float
unsigned char doubledouble Convertire a long; convertire long a doubleConvert to long; convert long to double
unsigned char long double Convertire a long; convertire long a doubleConvert to long; convert long to double
unsigned shortunsigned short char Mantenimento del byte meno significativoPreserve low-order byte
unsigned shortunsigned short shortshort Viene mantenuto lo schema di bit; il bit più significativo diventa il bit di segnoPreserve bit pattern; high-order bit becomes sign bit
unsigned shortunsigned short longlong Estensione zeroZero-extend
unsigned shortunsigned short unsigned char Mantenimento del byte meno significativoPreserve low-order byte
unsigned shortunsigned short unsigned long Estensione zeroZero-extend
unsigned shortunsigned short floatfloat Convertire a long; convertire long a floatConvert to long; convert long to float
unsigned shortunsigned short doubledouble Convertire a long; convertire long a doubleConvert to long; convert long to double
unsigned shortunsigned short long double Convertire a long; convertire long a doubleConvert to long; convert long to double
unsigned long char Mantenimento del byte meno significativoPreserve low-order byte
unsigned long shortshort Mantenimento della parola meno significativaPreserve low-order word
unsigned long longlong Viene mantenuto lo schema di bit; il bit più significativo diventa il bit di segnoPreserve bit pattern; high-order bit becomes sign bit
unsigned long unsigned char Mantenimento del byte meno significativoPreserve low-order byte
unsigned long unsigned shortunsigned short Mantenimento della parola meno significativaPreserve low-order word
unsigned long floatfloat Convertire a long; convertire long a floatConvert to long; convert long to float
unsigned long doubledouble Convertire direttamente a doubleConvert directly to double
unsigned long long double Convertire a long; convertire long a doubleConvert to long; convert long to double

Sezione specifica MicrosoftMicrosoft Specific

Per il compilatore C Microsoft a 32 bit, il tipo unsigned int equivale al tipo unsigned long.For the Microsoft 32-bit C compiler, the unsigned int type is equivalent to the unsigned long type. La conversione di un valore unsigned int viene eseguita nello stesso modo di una conversione di un unsigned long.Conversion of an unsigned int value proceeds in the same way as conversion of an unsigned long. Le conversioni dai valori unsigned long ai valori float non sono precise se il valore convertito è maggiore del valore long massimo con segno positivo.Conversions from unsigned long values to float are not accurate if the value being converted is larger than the maximum positive signed long value.

Fine sezione specifica MicrosoftEND Microsoft Specific

Vedere ancheSee Also

Conversioni di assegnazioneAssignment Conversions