czwartek, 26 kwietnia 2018

Język C – Przekazywanie typu


C – Przekazywanie typu

Przekazywanie typu to sposób na konwersję zmiennej z jednego typu danych na inny typ danych. Na przykład, jeśli chcesz przechowywać wartość "long" jako liczba całkowita typu int, możesz wpisać "long" na "int". Można konwertować wartości z jednego typu na inny jawnie, korzystając z operatora przesyłania w następujący sposób:
(nazwa_typu) wyrażenie
Rozważmy następujący przykład, w którym operator rzutowania powoduje podział jednej zmiennej liczbowej na drugą jako operację zmiennoprzecinkową:
#include <stdio.h>

main() {

   int suma = 17, ile = 5;
   double mean;

   srednia = (double) suma / ile;
   printf("Wartosc sredniej : %f\n", srednia );
}
Gdy powyższy kod zostanie skompilowany i wykonany, generuje następujący wynik:
Wartosc sredniej : 3.400000
Należy zauważyć, że operator rzutowania ma pierwszeństwo przed działaniem, więc wartość suma jest najpierw przekształcana na typ double, a na końcu dzielona jest przez liczbę, która daje podwójną wartość.
Konwersje typów mogą być niejawne, które są wykonywane automatycznie przez kompilator lub można je jawnie określić za pomocą operatora rzutowania. Uważa się, że dobrą praktyką programistyczną jest używanie operatora rzutowania, ilekroć konwersje typu są konieczne.
Integer promotion to proces, w którym wartości integer type "smaller" niż int lub unsigned int są konwertowane na int lub unsigned int. Zobaczmy przykład dodania znaku z liczbą całkowitą:
#include <stdio.h>

main() {

   int  i = 17;
   char c = 'c'; /* wartość ascii to 99 */
   int suma;

   suma = i + c;
   printf("Wartosc suma to : %d\n", suma );
}
Gdy powyższy kod zostanie skompilowany i wykonany, wygeneruje się następujący wynik:
Wartosc suma to : 116
Tutaj wartość suma wynosi 116, ponieważ kompilator konwertuje wartość "c" na kod ASCII przed wykonaniem faktycznej operacji dodawania.

Zwykła konwersja arytmetyczna

Typowe konwersje arytmetyczne są niejawnie wykonywane w celu rzutowania ich wartości do wspólnego typu. Kompilator najpierw wykonuje integer promotion, jeśli operandy nadal mają różne typy, to są konwertowane na typ, który pojawia się najwyżej w hierarchii.

Typowe konwersje arytmetyczne nie są wykonywane dla operatorów przypisania, ani dla operatorów logicznych && i ||. Zobaczmy następujący przykład, aby zrozumieć tę koncepcję:
#include <stdio.h>

main() {

   int  i = 17;
   char c = 'c'; /* wartosc ascii to 99 */
   float suma;

   suma = i + c;
   printf("Wartosc suma to: %f\n", suma );
}
Gdy powyższy kod zostanie skompilowany i wykonany, wygeneruje się następujący wynik:
Wartosc suma to : 116.000000
Tutaj łatwo zrozumieć, że pierwsze c jest konwertowane na liczbę całkowitą, ale ponieważ ostateczna wartość jest double, ma zastosowanie zwykła konwersja arytmetyczna, a kompilator konwertuje i oraz a na "float" i dodaje je, dając wynik typu "float".

Poprzednia strona                                                          Następna strona

Brak komentarzy:

Prześlij komentarz