Приведення типів у C: перетворення типів, неявне, явне з прикладом

Що таке приведення типів у C?

Приведення типів — це перетворення одного типу даних в інший. Це також називається перетворенням даних або перетворенням типів мовою C. Це одна з важливих концепцій програмування на C.

Програмування «C» передбачає два типи операцій приведення типу:

  1. Неявне приведення типів
  2. Явне приведення типів

Неявне приведення типів

Неявне приведення типів означає перетворення типів даних без втрати їх початкового значення. Цей тип приведення типів необхідний, коли ви хочете змінити типи даних без зміна значущості значень, що зберігаються всередині змінна.

Неявне перетворення типу в 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

Неявне приведення типів

  1. У наведеному прикладі ми оголосили змінну короткого типу даних зі значенням, ініціалізованим 10.
  2. У другому рядку ми оголосили змінну типу даних int.
  3. У третьому рядку ми присвоїли значення змінної 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».

Важливі моменти щодо неявних перетворень

  • Неявний тип перетворення типу також називається стандартним перетворенням типу. Ми не вимагаємо ніяких ключових слів або спеціальних операторів у неявному приведенні типів.
  • Перетворення меншого типу даних у більший тип даних також називається as просування типу. У наведеному вище прикладі ми також можемо сказати, що значення s підвищено до типу integer.
  • Неявне перетворення типів завжди відбувається з сумісними типами даних.

Ми не можемо виконати неявне приведення типів для типів даних, які несумісні один з одним, наприклад:

  1. Перетворення float на int скоротить частину дробу, отже, втративши значення значення.
  2. Перетворення double на float округлить цифри.
  3. Перетворення long int на int призведе до видалення надлишкових бітів старшого порядку.

У всіх вищезазначених випадках, коли ми перетворюємо типи даних, значення втрачає своє значення. Як правило, компілятор попереджає про втрату значення значення.

Програмування на 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

Явне приведення типів

  1. Ми ініціалізували змінну 'a' типу float.
  2. Далі ми маємо іншу змінну 'b' цілочисельного типу даних. Оскільки змінні 'a' і 'b' належать до різних типів даних, 'C' не дозволить використовувати такий вираз і викличе помилку. У деяких версіях «C» вираз буде обчислено, але результат не буде бажаним.
  3. Щоб уникнути таких ситуацій, ми привели змінну 'a' до типу float. Використовуючи явні методи приведення типу, ми успішно перетворили float у тип даних integer.
  4. Ми надрукували значення 'a', яке все ще є числом з плаваючою точкою
  5. Після приведення типів результатом завжди буде ціле число «b».

Таким чином ми можемо реалізувати явне приведення типів у програмуванні на C.

Підсумки

  • Приведення типів також називається перетворенням типів
  • Це означає перетворення одного типу даних в інший.
  • Перетворення меншого типу даних у більший також називається підвищенням типу.
  • Існує два типи перетворення типів: неявне та явне перетворення типів у C.
  • Неявне перетворення типу виконується автоматично, коли знайдено сумісний тип даних.
  • Для явного перетворення типу потрібен оператор приведення типу.

Майте на увазі наступні правила програмування під час роботи з різними типами даних, щоб запобігти втраті даних:

  • Типи цілих чисел повинні бути перетворені на float.
  • Типи Float слід перетворити на double.
  • Типи символів повинні бути перетворені в цілі.