Udostępnij za pośrednictwem


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
char1 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.

Zobacz też

Konwersje przydziałów