Zalecane, 2021

Wybór Redakcji

Różnica między odlewaniem typu a konwersją typu

Dwa terminy "rzutowanie typu" i "konwersja typu" występują, gdy zachodzi potrzeba konwersji jednego typu danych na inny. Gdy oba typy są ze sobą kompatybilne, konwersja jednego typu na inny odbywa się automatycznie przez kompilator. Istnieje jednak zasadnicza różnica między konwersją typu i rzutowaniem typu, tzn. Konwersja typu odbywa się "automatycznie" przez kompilator, natomiast rzutowanie typu ma być "jawnie zrobione" przez programistę. Porozmawiajmy o różnicy zarówno odlewania, jak i konwersji za pomocą tabeli porównawczej.

Wykres porównania:

Podstawa do porównaniaWpisz CastingKonwersja typu
ZnaczenieJeden typ danych jest przypisywany do innego przez użytkownika, przy użyciu operatora odlewania, wówczas nazywa się "Typ Casting".Konwersja jednego typu danych na inny automatycznie przez kompilator nosi nazwę "Konwersja typów".
StosowanyOdlewanie typów można również zastosować do dwóch "niekompatybilnych" typów danych.Konwersję typów można wdrożyć tylko wtedy, gdy dwa typy danych są "zgodne".
OperatorW przypadku przesyłania typu danych do innego wymagany jest operator odlewania "()".Nie wymaga operatora.
Rozmiar typów danychTyp miejsca docelowego może być mniejszy niż typ źródła.Tutaj typ miejsca docelowego musi być większy niż typ źródła.
WdrożonyOdbywa się to podczas projektowania programu.Jest to robione jawnie podczas kompilacji.
Typ konwersji
Zawężanie konwersji.Rozszerzenie konwersji.
Przykładint a;
bajt b;
...
...
b = (bajt) a;
int a = 3;
float b;
b = a; // wartość w b = 3, 000.

Definicja odlewania typu

Odlewanie typu można zdefiniować jako rzutowanie jednego typu danych na inny typ danych przez programistę w czasie projektowania programu. Automatyczna konwersja jednego typu danych na inny nie jest możliwa przez cały czas. Może to być warunek, że "typ miejsca docelowego" jest mniejszy niż "typ źródła", tak więc programista musi wyraźnie rzucić większy typ danych na mniejszy typ danych za pomocą operatora odlewania "()". Ponieważ większy typ danych jest modulowany do mniejszego typu danych, jest również nazywany "zwężeniem konwersji".

Deklaracja:

 target_type = (target_type) variable / value // target type to typ, w którym chcesz przekonwertować typ źródła, zawsze jest to typ miejsca docelowego. 

Rozumiem to na przykładzie. Chcesz przekonwertować typ danych "int" na "bajt", teraz, ponieważ "bajt" jest mniejszy niż "int", konwersja typu nie jest dozwolona. Tutaj musieliśmy domyślnie przekonwertować "int" na "bajt" za pomocą operatora odlewania "()". Ponieważ "int" jest większe niż "bajt", rozmiar "int" zostanie zmniejszony do zakresu "int mod byte".

 int a; bajt b; ... ... b = (bajt) a; 

Kiedy 'float' jest konwertowane na 'int', rozmiar float zostaje obcięty, ponieważ 'int' nie przechowuje wartości ułamkowej. Jeśli rozmiar typu docelowego jest zbyt mały, aby zmieścił się typ źródła, wówczas typem źródła jest modulo typ docelowy "zakres". Przesyłanie można również zastosować, gdy typy danych są zgodne, dobrze jest używać odlewania typów wszędzie tam, gdzie wymagana jest konwersja typu.

Definicja konwersji typu

Konwersja typów to automatyczna konwersja jednego typu danych na inny, ilekroć jest to wymagane, wykonywane jawnie przez kompilator. Ale przed konwersją typu należy spełnić dwa warunki.

  • Typ źródłowy i docelowy musi być zgodny.
  • Typ miejsca docelowego musi być większy niż typ źródła.

Te dwa warunki powinny być spełnione, aby uzyskać konwersję typu, i ten rodzaj konwersji nazywa się "poszerzaniem konwersji", ponieważ mniejszy typ jest konwertowany na większy typ, występuje poszerzenie typu. W przypadku tej poszerzającej się konwersji typy liczbowe jako "int", "float" są ze sobą kompatybilne, podczas gdy numeryczne do char i boolean lub char do boolean również nie są kompatybilne.

Ten przykład zapewni lepszy widok tego

 int a = 3; float b; b = a; // wartość w b = 3, 000. 

Tutaj, "int" jest konwertowane na "float", który jest większy niż "int", więc występuje poszerzenie typu źródła. W tym przypadku operator odlewania nie jest wymagany, ponieważ kompilator zrobi to jawnie.

Kluczowe różnice między odlewaniem typu a konwersją

  1. Podstawową różnicą, która odróżnia odlewanie typu od konwersji typu, jest to, że odlewanie typu jest konwersją jednego typu na inny, dokonane przez programistę. Z drugiej strony konwersja typu jest konwersją jednego typu na inny, wykonywaną przez kompilator podczas kompilacji.
  2. Odlewanie typów można zastosować do typów danych, które mogą nie być ze sobą kompatybilne, ale konwersja typu może być stosowana tylko do typów danych, które są ze sobą kompatybilne.
  3. Konwersja jednego typu na inny podczas odlewania typu wymaga operatora odlewania "()", podczas gdy konwersja jednego typu danych na inny w konwersji typu nie wymaga żadnego operatora.
  4. Podczas konwertowania jednego typu danych na inny w trybie rzutowania typ docelowy może być większy lub mniejszy niż typ źródła. Z drugiej strony, typ docelowy musi być większy niż typ źródła w konwersji typu.
  5. Konwersja jednego typu na inny odbywa się podczas kodowania w trybie rzutowania, natomiast podczas konwersji typu konwersja jednego typu na inną odbywa się jawnie podczas kompilacji.
  6. Odlewanie typu nazywa się zwężeniem, ponieważ tutaj typ docelowy może być mniejszy niż typ źródłowy, natomiast konwersja typu nazywa się rozszerzającą konwersją, ponieważ tutaj typ docelowy musi być większy niż typ źródłowy.

Wniosek:

Można wywnioskować, że konwersja typu i odlewanie typu powodują konwersję jednego typu danych na inny, ale różnią się w pewnym sensie tym, że odlewanie typu jest wykonywane przez programistę, przy użyciu operatora rzutowania '()', a konwersja typu odbywa się przez kompilator i nie korzysta z żadnego operatora.

Top