Převody z integrálních typů bez znaménka
Pokud je celé číslo bez znaménka převedeno na celé číslo nebo typ s plovoucí desetinnou čárkou, je-li původní hodnota reprezentovatelná v typu výsledku, hodnota se nezmění.
Když kompilátor převede celé číslo bez znaménka na celé číslo větší velikosti, hodnota je nulou rozšířena. Při převodu na celé číslo menší velikosti se bity s vysokým pořadím zkrátí. Výsledek se interpretuje pomocí typu výsledku, jak je znázorněno v tomto příkladu:
unsigned k = 65533;
short j;
j = k;
printf_s( "%hd\n", j ); // Prints -3
Když kompilátor převede celé číslo bez znaménka na typ s plovoucí desetinnou čárkou, pokud původní hodnota není přesně reprezentovatelná v typu výsledku, je výsledkem další vyšší nebo nižší reprezentovatelná hodnota.
Informace o velikostech integrálních typů a typech s plovoucí desetinou čárkou najdete v tématu Úložiště základních typů .
Specifické pro Microsoft
V kompilátoru unsigned
Microsoftu (nebo unsigned int
) jsou unsigned long
odlišné, ale ekvivalentní typy. unsigned int
Převod hodnoty pokračuje stejným způsobem jako převod hodnoty unsigned long
.
END Microsoft Specific
Následující tabulka shrnuje převody z celočíselných typů bez znaménka.
Tabulka převodů z celočíselných typů bez znaménka
Z | Záměr | metoda |
---|---|---|
unsigned char |
char |
Zachovat bitový vzor; Bit s vysokým pořadím se změní na bit znaménka. |
unsigned char |
short |
Nulové rozšíření |
unsigned char |
long |
Nulové rozšíření |
unsigned char |
long long |
Nulové rozšíření |
unsigned char |
unsigned short |
Nulové rozšíření |
unsigned char |
unsigned long |
Nulové rozšíření |
unsigned char |
unsigned long long |
Nulové rozšíření |
unsigned char |
float |
Převést přesně na float |
unsigned char |
double |
Převést přesně na double |
unsigned char |
long double |
Převést přesně na long double |
unsigned short |
char |
Zachování bajtů s nízkým pořadím |
unsigned short |
short |
Zachovat bitový vzor; Bit s vysokým pořadím se změní na bit znaménka. |
unsigned short |
long |
Nulové rozšíření |
unsigned short |
long long |
Nulové rozšíření |
unsigned short |
unsigned char |
Zachování bajtů s nízkým pořadím |
unsigned short |
unsigned long |
Nulové rozšíření |
unsigned short |
unsigned long long |
Nulové rozšíření |
unsigned short |
float |
Převést přesně na float |
unsigned short |
double |
Převést přesně na double |
unsigned short |
long double |
Převést přesně na long double |
unsigned long |
char |
Zachování bajtů s nízkým pořadím |
unsigned long |
short |
Zachování slova s nízkým pořadím |
unsigned long |
long |
Zachovat bitový vzor; Bit s vysokým pořadím se změní na bit znaménka. |
unsigned long |
long long |
Nulové rozšíření |
unsigned long |
unsigned char |
Zachování bajtů s nízkým pořadím |
unsigned long |
unsigned short |
Zachování slova s nízkým pořadím |
unsigned long |
unsigned long long |
Nulové rozšíření |
unsigned long |
float |
Převod na nejbližší reprezentovatelné float |
unsigned long |
double |
Převést přesně na double |
unsigned long |
long double |
Převést přesně na long double |
unsigned long long |
char |
Zachování bajtů s nízkým pořadím |
unsigned long long |
short |
Zachování slova s nízkým pořadím |
unsigned long long |
long |
Zachování dwordu s nízkým pořadím |
unsigned long long |
long long |
Zachovat bitový vzor; Bit s vysokým pořadím se změní na bit znaménka. |
unsigned long long |
unsigned char |
Zachování bajtů s nízkým pořadím |
unsigned long long |
unsigned short |
Zachování slova s nízkým pořadím |
unsigned long long |
unsigned long |
Zachování dwordu s nízkým pořadím |
unsigned long long |
float |
Převod na nejbližší reprezentovatelné float |
unsigned long long |
double |
Převod na nejbližší reprezentovatelné double |
unsigned long long |
long double |
Převod na nejbližší reprezentovatelné long double |