Приведення типів у C: неявне та явне перетворення
⚡ Розумний підсумок
Приведення типів у C перетворює один тип даних на інший, або неявно, коли компілятор автоматично переводить на менший сумісний тип, або явно, коли програміст примусово виконує перетворення за допомогою оператора приведення, щоб контролювати точність та запобігати неочікуваним результатам.

Що таке приведення типів у C?
Приведення типів — це перетворення одного типу даних в інший. Це також називається перетворенням даних або перетворенням типів мовою C. Це одна з важливих концепцій програмування на C.
Програмування «C» передбачає два типи операцій приведення типу:
- Неявне приведення типів
- Явне приведення типів
Неявне приведення типів
Неявне приведення типів означає перетворення типів даних без втрати їхнього початкового значення. Цей тип приведення типів є важливим, коли потрібно змінити типи даних, не змінюючи значущості значень, що зберігаються всередині. змінна.
Неявне перетворення типу в C відбувається автоматично, коли значення копіюється в його сумісний тип даних. Під час перетворення застосовуються суворі правила перетворення типів. Якщо операнди належать до двох різних типів даних, тоді операнд із нижчим типом даних автоматично перетворюється на вищий тип даних. Цей тип перетворення типів можна побачити в наступному прикладі.
#include<stdio.h> int main(){ short a=10; //initializing variable of short data type int b; //declaring int variable b=a; //implicit type casting printf("%d\n",a); printf("%d\n",b); }
вихід:
10 10
- У наведеному прикладі ми оголосили змінну короткого типу даних зі значенням, ініціалізованим 10.
- У другому рядку ми оголосили змінну типу даних int.
- У третьому рядку ми присвоїли значення змінної s змінній a. У третьому рядку виконується неявне перетворення типу, коли значення зі змінної s, яка має тип даних short, копіюється в змінну a, яка має тип даних int.
Перетворення символів на Int
Розглянемо приклад додавання символу, декодованого в ASCII, до цілого числа:
#include <stdio.h> main() { int number = 1; char character = 'k'; /*ASCII value is 107 */ int sum; sum = number + character; printf("Value of sum : %d\n", sum ); }
вихід:
Value of sum : 108
Тут компілятор виконав цілочисельне просування, перетворивши значення «k» на ASCII перед виконанням фактичної операції додавання.
Ієрархія арифметичного перетворення
Компілятор спочатку переводить символ до цілого числа. Якщо операнди все ще мають різні типи даних, вони перетворюються на найвищий тип даних, який відображається на такій діаграмі ієрархії:
Розглянемо наступний приклад, щоб зрозуміти концепцію:
#include <stdio.h> main() { int num = 13; char c = 'k'; /* ASCII value is 107 */ float sum; sum = num + c; printf("sum = %f\n", sum );}
вихід:
sum = 120.000000
Спочатку змінна c перетворюється на ціле число, але компілятор перетворює num та c на «float» та додає їх, щоб отримати результат «float».
Важливі моменти щодо неявних перетворень
- Неявний тип перетворення типу також називається стандартним перетворенням типу. Ми не вимагаємо ніяких ключових слів або спеціальних операторів у неявному приведенні типів.
- Перетворення з меншого типу даних у більший тип даних також називається підвищенням типу. У наведеному вище прикладі можна також сказати, що значення s підвищується до цілочисельного типу.
- Неявне перетворення типів завжди відбувається з сумісними типами даних.
Ми не можемо виконати неявне приведення типів для типів даних, які несумісні один з одним, наприклад:
- Перетворення float на int скоротить частину дробу, отже, втративши значення значення.
- Перетворення double на float округлить цифри.
- Перетворення long int на int призведе до падінняping надлишкових бітів старшого порядку.
У всіх вищезазначених випадках, коли ми перетворюємо типи даних, значення втрачає своє значення. Як правило, компілятор попереджає про втрату значення значення.
Програмування на C надає інший спосіб приведення типів, тобто явне приведення типів.
Явне приведення типів
При неявному перетворенні типу тип даних перетворюється автоматично. Є деякі сценарії, за яких нам може знадобитися примусове перетворення типу. Припустимо, у нас є змінна div, яка зберігає поділ двох операндів, які оголошені як тип даних int.
int result, var1=10, var2=3;
result=var1/var2;
У цьому випадку після ділення, виконаного на змінні var1 і var2, результат, що зберігається в змінній “result”, буде мати цілочисельний формат. Щоразу, коли це трапляється, значення, що зберігається в змінній «результат», втрачає сенс, оскільки воно не враховує частку дробу, яка зазвичай отримується при діленні двох чисел.
Для примусового перетворення типу в таких ситуаціях ми використовуємо явне приведення типу.
Для цього потрібен оператор приведення типу. Загальний синтаксис для операцій приведення типу такий:
(type-name) expression
Тут,
- Ім’я типу є стандартним типом даних мови «С».
- Вираз може бути константою, змінною або фактичним виразом.
Давайте напишемо програму, щоб продемонструвати, як приведення типів у C з явним приведенням типів.
#include<stdio.h> int main() { float a = 1.2; //int b = a; //Compiler will throw an error for this int b = (int)a + 1; printf("Value of a is %f\n", a); printf("Value of b is %d\n",b); return 0; }
вихід:
Value of a is 1.200000 Value of b is 2
- Ми ініціалізували змінну 'a' типу float.
- Далі у нас є ще одна змінна 'b' цілочисельного типу даних. Оскільки змінні 'a' та 'b' мають різні типи даних, 'C' не дозволить використовувати такий вираз і викличе помилку. У деяких версіях 'C' вираз буде обчислено, але результат не буде бажаним.
- Щоб уникнути таких ситуацій, ми привели змінну 'a' до типу float. Використовуючи явні методи приведення типу, ми успішно перетворили float у тип даних integer.
- Ми надрукували значення 'a', яке все ще є числом з плаваючою точкою
- Після приведення типів результатом завжди буде ціле число «b».
Таким чином ми можемо реалізувати явне приведення типів у програмуванні на C.



