C-Type Casting
Konwersja jednego typu danych na inny jest znana jako typ casting lub konwersja typu. Na przykład, jeśli chcesz zapisać wartość 'long’ do prostej liczby całkowitej, możesz wpisać 'long’ do 'int’. Możesz przekonwertować wartości z jednego typu na inny jawnie za pomocą operatora cast w następujący sposób −
(type_name) expression
rozważ następujący przykład, w którym operator cast powoduje, że dzielenie jednej zmiennej całkowitej przez inną ma być wykonywane jako operacja zmiennoprzecinkowa-
#include <stdio.h>main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean );}
gdy powyższy kod jest kompilowany i wykonywany, daje następujący wynik −
#include <stdio.h>main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean );}
Value of mean : 3.400000
należy tutaj zauważyć, że operator cast ma pierwszeństwo przed dzieleniem, więc wartość sum jest najpierw konwertowana do typu Double, a na końcu otrzymuje podzielone przez liczbę dając podwójną wartość.
konwersje typów mogą być niejawne, które są wykonywane przez kompilator automatycznie lub mogą być jawnie określone za pomocą operatora cast. Za dobrą praktykę programistyczną uważa się używanie operatora cast wszędzie tam, gdzie konieczne są konwersje typów.
Promocja Integer
Promocja Integer to proces, w którym wartości typu integer „mniejsze” niż int lub unsigned int są konwertowane na int lub unsigned int. Rozważ przykład dodania znaku z liczbą całkowitą –
#include <stdio.h>main() { int i = 17; char c = 'c'; /* ascii value is 99 */ int sum; sum = i + c; printf("Value of sum : %d\n", sum );}
gdy powyższy kod jest kompilowany i wykonywany, daje następujący wynik −
Value of sum : 116
tutaj wartość sum wynosi 116, ponieważ kompilator wykonuje promocję liczby całkowitej i konwertuje wartość 'c’ na ASCII przed wykonaniem rzeczywistej operacji dodawania.
zwykła Konwersja arytmetyczna
zwykłe konwersje arytmetyczne są domyślnie wykonywane w celu przekazania ich wartości do wspólnego typu. Kompilator najpierw wykonuje integer promotion; jeśli operandy nadal mają różne typy, wtedy są konwertowane na typ, który jest najwyższy w następującej hierarchii –
zwykłe konwersje arytmetyczne nie są wykonywane dla operatorów przypisania, ani dla operatorów logicznych && I ||. Weźmy następujący przykład, aby zrozumieć koncepcję −
#include <stdio.h>main() { int i = 17; char c = 'c'; /* ascii value is 99 */ float sum; sum = i + c; printf("Value of sum : %f\n", sum );}
gdy powyższy kod jest kompilowany i wykonywany, daje następujący wynik −
Value of sum : 116.000000
tutaj łatwo jest zrozumieć, że pierwsze c zostanie przekonwertowane na liczbę całkowitą, ale ponieważ końcowa wartość jest Podwójna, stosuje się zwykłą konwersję arytmetyczną, a kompilator konwertuje i I c na 'float’ i dodaje je dając wynik „float”.
Leave a Reply