Rekomenduojama, 2022

Redaktoriaus Pasirinkimas

Skirtumas tarp tipo liejimo ir tipo konversijos

Du terminai „tipo liejimas“ ir „tipo konvertavimas“ įvyksta, kai reikia keisti vieną duomenų tipą į kitą. Kai abu tipai yra suderinami vienas su kitu, kompiliatorius automatiškai atlieka vieno tipo konvertavimą į kitą. Tačiau yra esminis skirtumas tarp tipo konvertavimo ir tipo liejimo, ty tipo konvertavimą „automatiškai“ atlieka kompiliatorius, o tipo liejimą „aiškiai“ turi atlikti programuotojas. Aptarkime skirtumą, lyginant su palyginimo diagrama, tiek tipo liejimą, tiek konversiją.

Palyginimo diagrama:

Palyginimo pagrindasTipas liejimasTipo konvertavimas
ReikšmėNaudotojas, naudodamas „cast“ operatorių, paskiria vieną duomenų tipą, tada jis vadinamas „Type Casting“.Vieno tipo duomenų konvertavimas į automatinį kompiliatoriaus pavadinimą vadinamas „Tipo konversija“.
TaikomaTipo liejimas taip pat gali būti taikomas dviems „nesuderinamiems“ duomenų tipams.Tipo konvertavimą galima įgyvendinti tik tada, kai du duomenų tipai yra „suderinami“.
operatoriusNorint perduoti duomenų tipą kitam, reikalingas liejimo operatorius „()“.Operatoriaus nereikia.
Duomenų tipų dydisPaskirties tipas gali būti mažesnis už šaltinio tipą.Čia paskirties vietos tipas turi būti didesnis nei šaltinio tipas.
ĮgyvendintaTai atliekama kuriant programą.Tai daroma aiškiai rengiant.
Konversijos tipas
Siauresnė konversija.Konversijos išplėtimas.
Pavyzdysint a;
baitų b;
...
...
b = (baitas) a;
int a = 3;
float b;
b = a; // reikšmė b = 3.000.

„Casting“ tipo apibrėžimas

Tipo liejimas gali būti apibrėžiamas kaip vienas duomenų tipo perdavimas kitam duomenų tipui, programuotojui programos kūrimo metu. Automatinis vieno duomenų tipo konvertavimas į kitą neįmanomas visą laiką. Gali būti sąlyga, kad „paskirties tipas“ yra mažesnis už „šaltinio tipą“, todėl programuotojas turi aiškiai nurodyti didesnį duomenų tipą į mažesnį duomenų tipą, naudodamas „liejimo operatorių“ (). Kadangi didesnis duomenų tipas yra moduliuojamas pagal mažesnį duomenų tipą, jis taip pat vadinamas „susiaurinimu“.

Deklaracija:

 destination_type = (target_type) kintamasis / vertė // tikslinis tipas yra tipas, kuriame norite konvertuoti šaltinio tipą, kuris visada yra paskirties tipas. 

Suprasime jį su pavyzdžiu. Duomenų tipą „int“ norite konvertuoti į „baitą“, dabar, kai „baitas“ yra mažesnis už „int“, tipo konvertavimas neleidžiamas. Čia mes turėjome netiesiogiai konvertuoti „int“ į „baitą“ naudojant liejimo operatorių „()“. Kadangi „int“ yra didesnis nei „baitas“, „int“ dydis bus sumažintas iki „int mod byte“ intervalo.

 int a; baitų b; ... ... b = (baitas) a; 

Kai „plūdė“ konvertuojama į „int“, plūdės dydis sutrumpinamas, nes „int“ neišsaugo dalinės vertės. Jei paskirties vietos tipas yra per mažas, kad šaltinio tipas atitiktų, šaltinio tipas yra modulio paskirties tipo „diapazonas“. Liejimas taip pat gali būti taikomas, kai duomenų tipai yra suderinami, gera praktika naudoti tipo liejimą visur, kur reikia konversijų.

Tipo konversijos apibrėžimas

Tipo konvertavimas yra automatinis vieno duomenų tipo konvertavimas į kitą, kai to reikalaujama kompiliatoriaus. Tačiau prieš tipo konvertavimą turi būti įvykdytos dvi sąlygos.

  • Šaltinio ir paskirties tipas turi būti suderinamas.
  • Paskirties tipas turi būti didesnis nei šaltinio tipas.

Šios dvi sąlygos turėtų atitikti tipo konversiją, o tokio tipo konversija vadinama „plečiama konversija“, nes mažesnis tipas konvertuojamas į didesnį tipą, atsiranda tipo išplėtimas. Dėl šio padidinimo konversijos skaitmeniniai tipai, kaip „int“, „float“, yra suderinami tarpusavyje, o skaitmeniniai į „char“ ir „boolean“ arba „char“ iki „boolean“ taip pat nėra suderinami.

Šis pavyzdys suteiks geresnį vaizdą

 int a = 3; float b; b = a; // reikšmė b = 3.000. 

Čia „int“ paverčiamas „float“, kuris yra didesnis nei „int“, todėl atsiranda šaltinio tipo išplėtimas. Čia nereikia jokio liejimo operatoriaus, nes kompiliatorius tai padarys aiškiai.

Pagrindiniai skirtumai tarp rūšiavimo ir konversijos

  1. Pagrindinis skirtumas, kuris išskiria tipinį liejimą nuo tipo konvertavimo, yra tai, kad tipo liejimas yra vieno tipo keitimas į kitą, kurį atlieka programuotojas. Kita vertus, tipo konvertavimas yra vieno tipo konvertavimas į kitą, kurį kompiliatorius atlieka rengiant.
  2. Tipo liejimas gali būti taikomas duomenų tipams, kurie gali būti nesuderinami vienas su kitu, tačiau tipo konvertavimas gali būti taikomas tik tiems duomenų tipams, kurie yra suderinami vienas su kitu.
  3. Vieno tipo konvertavimas į tipinį liejimą reikalauja liejimo operatoriaus „()“, o vieno duomenų tipo konvertavimas į kitą tipo konvertavimui nereikalauja operatoriaus.
  4. Konvertuodamas vieną duomenų tipą į kitą tipinio liejimo atveju, paskirties tipas gali būti didesnis arba mažesnis už šaltinio tipą. Kita vertus, paskirties vietos tipas turi būti didesnis nei tipo konvertavimo šaltinio tipas.
  5. Vieno tipo konvertavimas į kitą tipą atliekamas koduojant tipinį liejimą, o tipo konvertavimo metu vieno tipo konvertavimas į kitą yra aiškiai atliekamas sudarymo metu.
  6. Tipo liejimas vadinamas siaurinimu, nes čia paskirties tipas gali būti mažesnis už šaltinio tipą, o tipo konvertavimas vadinamas padidinimo konversija, nes čia paskirties tipas turi būti didesnis nei šaltinio tipas.

Išvada:

Galima daryti išvadą, kad tipo konvertavimas ir tipo liejimas atlieka užduotį paversti vieną duomenų tipą į kitą, tačiau skiriasi tuo, kad tipo liejimą atlieka programuotojas, naudodamasis „cast“ operatoriumi () ir tipo konvertavimą atlieka kompiliatorius, ir jis nenaudoja jokių operatorių.

Top