Що таке Typecasting в C?
Typecasting - це перетворення одного типу даних в інший. Це також називається перетворенням даних або перетворенням типу. Це одне з важливих понять, запроваджених у програмуванні на С.
Програмування "C" забезпечує два типи операцій лиття типів:
- Лиття неявного типу
- Відлитий тип лиття
Лиття неявного типу
Неявна передача типів означає перетворення типів даних без втрати їх початкового значення. Цей тип типорозміщення важливий, коли ви хочете змінити типи даних, не змінюючи значення значень, що зберігаються всередині змінної.
Неявне перетворення типу відбувається автоматично, коли значення копіюється до його сумісного типу даних. Під час перетворення застосовуються суворі правила перетворення типу. Якщо операнди мають два різних типи даних, то операнд, що має нижчий тип даних, автоматично перетворюється на вищий тип даних. Цей тип перетворення типу можна побачити в наступному прикладі.
#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);}
Вихідні дані
1010
- У наведеному прикладі ми оголосили змінну короткого типу даних зі значенням, ініціалізованим як 10.
- У другому рядку ми оголосили змінну типу даних int.
- У третьому рядку ми призначили значення змінної s змінній a. У третьому рядку неявне перетворення типу виконується як значення зі змінної s, яка має короткий тип даних, копіюється у змінну a, яка має тип даних int.
Перетворення символу на внутрішній
Розглянемо приклад додавання символу, декодованого в ASCII, з цілим числом:
#includemain() {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 перед виконанням фактичної операції додавання.
Ієрархія арифметичного перетворення
Спочатку компілятор переходить до підвищення символу до цілого числа. Якщо операнди все ще мають різні типи даних, то вони перетворюються на найвищий тип даних, який відображається на такій діаграмі ієрархії:
Розглянемо наступний приклад, щоб зрозуміти поняття:
#includemain() {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 призведе до скидання зайвих бітів високого порядку.
У всіх вищезазначених випадках, коли ми перетворюємо типи даних, значення втратить своє значення. Як правило, про втрату значення значення попереджає компілятор.
Програмування 'C' забезпечує інший спосіб випуску типів, який є явним литтям типу.
Відлитий тип лиття
При неявному перетворенні типів тип даних перетворюється автоматично. Є кілька сценаріїв, коли нам, можливо, доведеться змусити перетворити тип. Припустимо, ми маємо змінну div, яка зберігає поділ двох операндів, які оголошені як тип даних int.
int result, var1=10, var2=3;result=var1/var2;
У цьому випадку після ділення, виконаного на змінні var1 та var2, результат, що зберігається у змінній "result", буде у цілочисельному форматі. Щоразу, коли це трапляється, значення, яке зберігається у змінній "результат", втрачає значення, оскільки воно не враховує дробову частину, яку зазвичай отримують при діленні двох чисел.
Щоб примусити перетворення типу в таких ситуаціях, ми використовуємо явне приведення типу.
Для цього потрібен оператор лиття типів. Загальний синтаксис операцій лиття типів такий:
(type-name) expression
Ось,
- Назва типу - це стандартний тип даних мови "C".
- Вираз може бути константою, змінною або фактичним виразом.
Давайте напишемо програму, щоб продемонструвати реалізацію явного лиття типів у '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;}
Вихід:
Value of a is 1.200000Value of b is 2
- Ми ініціалізували змінну 'a' типу float.
- Далі ми маємо ще одну змінну 'b' цілочисельного типу даних. Оскільки змінні 'a' та 'b' мають різні типи даних, 'C' не дозволяє використовувати такий вираз, і це спричинить помилку. У деяких версіях 'C' вираз буде оцінено, але результат не буде бажаним.
- Щоб уникнути подібних ситуацій, ми ввели типову змінну 'a' типу float. Використовуючи явні методи лиття типів, ми успішно перетворили float у ціле число типів даних.
- Ми надрукували значення "a", яке все ще є плаваючим
- Після набору типів результатом завжди буде ціле число "b".
Таким чином, ми можемо реалізувати явне лиття типу в програмуванні на C.
Резюме
- Типікастінг також називається перетворенням типу
- Це означає перетворення одного типу даних в інший.
- Перетворення меншого типу даних у більший також називається просуванням типу.
- 'C' забезпечує неявний і явний спосіб перетворення типу.
- Неявне перетворення типу працює автоматично, коли виявляється сумісний тип даних.
- Явне перетворення типу вимагає оператора лиття типів.
Майте на увазі наступні правила для практики програмування при роботі з різними типами даних, щоб запобігти втраті даних:
- Цілі числа повинні бути перетворені в плаваючі.
- Типи поплавців слід перетворити на подвійні.
- Типи символів слід перетворити на цілі числа.