Konwersje z podpisanych typów całkowitych
Gdy podpisana liczba całkowita jest konwertowana na liczbę całkowitą lub typ zmiennoprzecinkowa, wartość jest niezmieniona, jeśli jest reprezentowana w typie wyniku.
Gdy podpisana liczba całkowita jest konwertowana na liczbę całkowitą o większym rozmiarze, wartość jest rozszerzona o znak. Po przekonwertowaniu na liczbę całkowitą o mniejszym rozmiarze bity o wysokiej kolejności są obcinane. Wynik jest interpretowany przy użyciu typu wyniku, jak pokazano w tym przykładzie:
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
Gdy kompilator konwertuje podpisaną liczbę całkowitą na typ zmiennoprzecinkowa, jeśli oryginalna wartość nie jest reprezentowana dokładnie w typie wyniku, wynik jest następnym wyższym lub niższym reprezentującym wartością.
Aby uzyskać informacje o rozmiarach typów całkowitych i zmiennoprzecinkowych, zobacz Magazyn typów podstawowych.
W poniższej tabeli podsumowano konwersje z podpisanych typów całkowitych. Zakłada się, char
że typ jest domyślnie podpisany. Jeśli używasz opcji czasu kompilacji, aby zmienić wartość domyślną dla char
typu na niepodpisany, konwersje podane w tabeli Konwersje z niepodpisanych typów całkowitych dla unsigned char
typu mają zastosowanie, zamiast konwersji w tej tabeli.
Specyficzne dla firmy Microsoft
W kompilatorze firmy Microsoft i long
są odrębnymi, int
ale równoważnymi typami. int
Konwersja wartości jest kontynuowana w taki sam sposób jak konwersja elementu long
.
END Microsoft Specific
Tabela konwersji z podpisanych typów całkowitych
Źródło | Działanie | Method |
---|---|---|
char 1 |
short |
Rozszerzanie znaku |
char |
long |
Rozszerzanie znaku |
char |
long long |
Rozszerzanie znaku |
char |
unsigned char |
Zachowaj wzorzec; bit o wysokiej kolejności traci funkcję jako bit znaku |
char |
unsigned short |
Rozszerzenie znaku na short ; konwertowanie short na unsigned short |
char |
unsigned long |
Rozszerzenie znaku na long ; konwertowanie long na unsigned long |
char |
unsigned long long |
Rozszerzenie znaku na long long ; konwertowanie long long na unsigned long long |
char |
float |
Reprezentacja dokładnie tak jak float |
char |
double |
Reprezentacja dokładnie tak jak double |
char |
long double |
Reprezentacja dokładnie tak jak long double |
short |
char |
Zachowaj bajt o niskiej kolejności |
short |
long |
Rozszerzanie znaku |
short |
long long |
Rozszerzanie znaku |
short |
unsigned char |
Zachowaj bajt o niskiej kolejności |
short |
unsigned short |
Zachowaj wzorzec bitowy; bit o wysokiej kolejności traci funkcję jako bit znaku |
short |
unsigned long |
Rozszerzenie znaku na long ; konwertowanie long na unsigned long |
short |
unsigned long long |
Rozszerzenie znaku na long long ; konwertowanie long long na unsigned long long |
short |
float |
Reprezentacja dokładnie tak jak float |
short |
double |
Reprezentacja dokładnie tak jak double |
short |
long double |
Reprezentacja dokładnie tak jak long double |
long |
char |
Zachowaj bajt o niskiej kolejności |
long |
short |
Zachowaj wyraz o niskiej kolejności |
long |
long long |
Rozszerzanie znaku |
long |
unsigned char |
Zachowaj bajt o niskiej kolejności |
long |
unsigned short |
Zachowaj wyraz o niskiej kolejności |
long |
unsigned long |
Zachowaj wzorzec bitowy; bit o wysokiej kolejności traci funkcję jako bit znaku |
long |
unsigned long long |
Rozszerzenie znaku na long long ; konwertowanie long long na unsigned long long |
long |
float |
Reprezentuje jako float . Jeśli long nie można dokładnie przedstawić, utracono pewną precyzję. |
long |
double |
Reprezentacja dokładnie tak jak double |
long |
long double |
Reprezentacja dokładnie tak jak long double |
long long |
char |
Zachowaj bajt o niskiej kolejności |
long long |
short |
Zachowaj wyraz o niskiej kolejności |
long long |
long |
Zachowaj dword o niskim porządku |
long long |
unsigned char |
Zachowaj bajt o niskiej kolejności |
long long |
unsigned short |
Zachowaj wyraz o niskiej kolejności |
long long |
unsigned long |
Zachowaj dword o niskim porządku |
long long |
unsigned long long |
Zachowaj wzorzec bitowy; bit o wysokiej kolejności traci funkcję jako bit znaku |
long long |
float |
Reprezentuje jako float . Jeśli long long nie można dokładnie przedstawić, utracono pewną precyzję. |
long long |
double |
Reprezentuje jako double . Jeśli long long nie można przedstawić dokładnie jako , utracono pewną precyzję double . |
long long |
long double |
Reprezentuje jako double . Jeśli long long nie można przedstawić dokładnie jako , utracono pewną precyzję double . |
1 Wszystkie char
wpisy zakładają, że char
typ jest domyślnie podpisany.