Co to jest rzutowanie czcionek w C?
Rzutowanie to konwersja jednego typu danych na inny. Nazywa się to również konwersją danych lub konwersją typów. Jest to jedna z ważnych koncepcji wprowadzonych w programowaniu w języku „C”.
Programowanie w języku C zapewnia dwa typy operacji rzutowania typów:
- Niejawne rzutowanie typów
- Jawne rzutowanie typu
Niejawne rzutowanie typów
Niejawne rzutowanie typów oznacza konwersję typów danych bez utraty pierwotnego znaczenia. Ten typ rzutowania jest niezbędny, gdy chcesz zmienić typy danych bez zmiany znaczenia wartości przechowywanych w zmiennej.
Niejawna konwersja typów odbywa się automatycznie, gdy wartość jest kopiowana do zgodnego typu danych. Podczas konwersji obowiązują ścisłe zasady konwersji typów. Jeśli operandy mają dwa różne typy danych, to operand o niższym typie danych jest automatycznie konwertowany na wyższy typ danych. Ten typ konwersji typu można zobaczyć w poniższym przykładzie.
#includeint main(){short a=10; //initializing variable of short data typeint b; //declaring int variableb=a; //implicit type castingprintf("%d\n",a);printf("%d\n",b);}
Wynik
1010
- W podanym przykładzie zadeklarowaliśmy zmienną o krótkim typie danych z wartością zainicjalizowaną jako 10.
- W drugiej linii zadeklarowaliśmy zmienną o typie danych int.
- W trzecim wierszu przypisaliśmy wartość zmiennej s zmiennej a. W trzecim wierszu jest wykonywana niejawna konwersja typu, gdy wartość ze zmiennej s, która ma krótki typ danych, jest kopiowana do zmiennej a, która jest typu int.
Konwersja znaku na Int
Rozważmy przykład dodania znaku dekodowanego w ASCII za pomocą liczby całkowitej:
#includemain() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );}
Wynik:
Value of sum : 108
W tym przypadku kompilator przeprowadził promocję liczb całkowitych, konwertując wartość „k” na ASCII przed wykonaniem faktycznej operacji dodawania.
Hierarchia konwersji arytmetycznej
Kompilator najpierw przechodzi do promowania znaku do liczby całkowitej. Jeśli operandy nadal mają różne typy danych, są konwertowane na najwyższy typ danych, który pojawia się na poniższym wykresie hierarchicznym:
Rozważ następujący przykład, aby zrozumieć koncepcję:
#includemain() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );}
Wynik:
sum = 120.000000
Przede wszystkim, zmienna C jest przekształcany do liczby całkowitej, ale przekształca kompilator Num i c na „float” i dodaje je do wytworzenia „pływać” wynik.
Ważne uwagi dotyczące niejawnych konwersji
- Niejawna konwersja typu jest również nazywana konwersją typu standardowego. Nie wymagamy żadnych słów kluczowych ani specjalnych instrukcji w niejawnym rzutowaniu typów.
- Konwersja z mniejszego typu danych na większy typ danych jest również nazywana promocją typu . W powyższym przykładzie możemy również powiedzieć, że wartość s jest promowana do typu integer.
- Niejawna konwersja typów zawsze ma miejsce w przypadku zgodnych typów danych.
Nie możemy wykonać niejawnego rzutowania typów na typach danych, które nie są ze sobą kompatybilne, takich jak:
- Konwersja typu float na int spowoduje obcięcie części ułamkowej, a tym samym utratę znaczenia wartości.
- Zamiana double na float zaokrągli cyfry w górę.
- Konwersja long int na int spowoduje porzucenie nadmiarowych bitów wyższego rzędu.
We wszystkich powyższych przypadkach, gdy przekonwertujemy typy danych, wartość straci swoje znaczenie. Ogólnie kompilator ostrzega o utracie znaczenia wartości.
Programowanie w języku „C” zapewnia inny sposób rzutowania typów, który jest jawnym rzutowaniem typów.
Jawne rzutowanie typu
W niejawnej konwersji typu typ danych jest konwertowany automatycznie. Istnieje kilka scenariuszy, w których może być konieczne wymuszenie konwersji typu. Załóżmy, że mamy zmienną div, która przechowuje podział dwóch operandów zadeklarowanych jako typ danych int.
int result, var1=10, var2=3;result=var1/var2;
W tym przypadku, po przeprowadzeniu dzielenia na zmiennych var1 i var2, wynik przechowywany w zmiennej „result” będzie w formacie całkowitoliczbowym. W takim przypadku wartość przechowywana w zmiennej „wynik” traci swoje znaczenie, ponieważ nie bierze pod uwagę części ułamkowej, która jest zwykle uzyskiwana podczas dzielenia dwóch liczb.
Aby wymusić konwersję typów w takich sytuacjach, używamy jawnego rzutowania typów.
Wymaga operatora rzutowania typu. Ogólna składnia operacji rzutowania typów jest następująca:
(type-name) expression
Tutaj,
- Nazwa typu to standardowy typ danych w języku „C”.
- Wyrażenie może być stałą, zmienną lub rzeczywistym wyrażeniem.
Napiszmy program, który zademonstruje implementację jawnego rzutowania typów w „C”.
#includeint main(){float a = 1.2;//int b = a; //Compiler will throw an error for thisint b = (int)a + 1;printf("Value of a is %f\n", a);printf("Value of b is %d\n",b);return 0;}
Wynik:
Value of a is 1.200000Value of b is 2
- Zainicjowaliśmy zmienną „a” typu float.
- Następnie mamy kolejną zmienną „b” typu danych całkowitoliczbowych. Ponieważ zmienne „a” i „b” mają różne typy danych, „C” nie pozwoli na użycie takiego wyrażenia i spowoduje błąd. W niektórych wersjach „C” wyrażenie zostanie ocenione, ale wynik nie będzie pożądany.
- Aby uniknąć takich sytuacji, przerzuciliśmy zmienną „a” typu float. Korzystając z metod rzutowania typu jawnego, pomyślnie przekonwertowaliśmy zmiennoprzecinkowy na liczbę całkowitą typu danych.
- Wydrukowaliśmy wartość „a”, która wciąż jest liczbą zmiennoprzecinkową
- Po rzutowaniu wynikiem zawsze będzie liczba całkowita „b”.
W ten sposób możemy zaimplementować jawne rzutowanie typów w programowaniu w języku „C”.
Podsumowanie
- Rzutowanie jest również nazywane konwersją typów
- Oznacza to konwersję jednego typu danych na inny.
- Konwersja mniejszego typu danych na większy jest również nazywana promocją typu.
- „C” zapewnia niejawny i jawny sposób konwersji typów.
- Niejawna konwersja typów działa automatycznie po znalezieniu zgodnego typu danych.
- Jawna konwersja typu wymaga operatora rzutowania typu.
Aby zapobiec utracie danych, należy pamiętać o następujących zasadach dotyczących praktyki programistycznej, gdy mamy do czynienia z różnymi typami danych:
- Typy całkowite należy przekonwertować na zmiennoprzecinkowe.
- Typy pływające należy przekonwertować na double.
- Typy znaków należy konwertować na liczby całkowite.