bool -> char -> short-int-unsigned int-long-unsigned long-float-double-long double
Не дивлячись на те, що деякі типи мають однаковий розмір, вони мають різний діапазон значень. Так unsigned int в порівнянні з intможе помістити в себе в 2 рази більше додатних значень і тому він старший у ієрархії. Також варто відмітити, що при участі таких типів як: bool, short, char. Вони автоматично перетворюються у int.
Далі піде мова про перетворення типів у виразі (коді програми).
Ось ми і підійшли до того як визначити якого типу буде результат обчислення. Давайте спробуємо це зробити за допомогою уже відомих знань. Припустимо, що ми працюємо з такими змінними.
int I=27;
short S=2;
float F = 22.3;
bool B = false;
Користуючись цими змінними ми хочемо обчислити I-F+S*B
А ось і питання – У змінну якого типу потрібно записати результат? Відповідь досить проста, але спершу потрібно їх записати у вигляді їхніх типів. int-float+short*bool. Тепер згадаємо, що short та bool автоматично перетворяться у int .
Вираз зміниться наint-float+int*int. Тепер float буде = 0. При множенні двох типів int, результат також буде цього типу. А от int-float буде рівне float. Тут з’явилося нове правило:
Якщо у будь-якому виразі використовуються різні типи даних, то результат буде дорівнювати більшому з типів.
Таким чином результат виразу буде мати тип float.
float rez = I-F+S*B; // 27-22.3+*0
cout << rez << endl; // результат = 4,7
Тепер це все не настільки важливо, щоб визначити тип достатньо знайти найбільший тип який використовується при обчисленні виразу.
Але це не знімає з програміста всієї обережності при роботі з типами змінних.
При діленні цілого числа на ціле, результатом буде також ціле число.
int i=3;
int j=2;
cout << i / j; // = 1. Дробова частина втрачена оскільки обидва типи int
Потрібно вказати, що результат повинен бути типу float. Це робиться так:
int i=3;
int j=2;
cout << (float) i / j ; // На екрані 1.5
Домашнє завдання
Сьогодні ви вивчили дуже важливу тему. Але щоб повноцінно її застосовувати вам потрібно вивчити теми з наступного уроку. Сьогодні не буде д/з. Ви отримаєте його на наступному уроці, де ви будете використовувати знання з обох уроків.
Наступний урок уже готується, очікуйте.
Базовий курс програмування на С++. Урок 5. Оператори порівняння. Логічні операції об'єднання. Аспекти використання декременту і інкременту. |
Написав Joker | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Понеділок, 10 листопада 2014 00:19 Переглядів: 2680 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Будь-який дурень може написати код,
зрозумілий комп'ютеру.
Хороший програміст пише код,
який зрозумілий людині.
Сьогодні ми вивчимо:
1. Різниця між префіксною і суфіксною формою у декрементi/інкременті
2. Оператори рівності.
3. Оператори порівняння.
4. Логічні операції об'єднання і негативна інверсія.
Різниця між префіксною та суфіксною формою у декременті/інкременті.
На перший погляд все дуже просто, декремент зменшує змінну на 1, а інкремент – збільшує. Також варто підкреслити те, що вони не застосовуються до літералів. Погодьтесь вираз 5++; дещо дивний і зовсім не зрозумілий. А ось так a++; все просто і зрозуміло, навіть якщо змінна a = 5;. Також ми визначили, що синтаксис цих операторів може бути різним (--a; a--;), яка ж між ними різниця? А різниця все таки є.
Префіксна форма: --a; ++a;
Суфіксна форма: a--; a++;
Давайте розглянемо все на прикладі
Приклад 1:
int a = 8;
cout << a; // На екрані 8
a++;
cout << a; // На екрані 9
++a;
cout << a; // На екрані 10
У даному випадку нічого несподіваного не відбулося і на перший погляд нічим ці дві форми не відрізняються. Але давайте розглянемо ще один приклад.
int a = 8;
cout << ++a; // На екрані 9
cout << a++; // На екрані 9
cout << a; // На екрані 10
Якщо крім суфіксної форми інкремента чи декремента є інші оператори, то спершу виконається інша команда (в залежності від оператора) і тільки після цього буде виконане додавання/віднімання 1.
cout << a++; Спершу буде виконано операцію виводу і на екран виведеться число і тільки після того буде виконана операція декремента.
Оператори рівності
Оператори порівняння
Логічні операції об’єднання і негативна інверсія В більшості випадків важко обмежитися тільки однією умовою. Для прикладу, щоб перевірити чи число A знаходиться у діапазоні від 5 до 10, нам знадобляться 2 умови. А>=5 і A<=10. Але компілятор не знає літери і, замість цього існують спеціальні символи.
Тепер ми можемо записати нашу умову як A>=5 && A<=10.
Логічне І (&&) Ця операція об’єднує 2 вирази у одне, і як і інші повертає значення true (правда) або false (брехня). Давайте визначимо коли результатом буде true, а коли false
Простіше кажучи ця операція поверне true тільки у тому випадку, коли обидва вирази дорівнюють true. true можна замінити будь-яким числом крім нуля, компілятор сприйме його як істину (true). False можна замінити тільки 0, тобто -1і інші від’ємні числа - true. Давайте розглянемо приклад програми яка визначає чи число належить діапазону 5-10 #include <iostream> #include <conio.h> using namespace std; int main() { setlocale(LC_CTYPE, "ukr"); double a; cout << "Введiть число --> "; cin >> a;
cout << ((a >= 5) && (a <= 10)) << endl;
cout << "Якщо ви бачите 0 - число не належить цьому дiапазону." << endl; cout << "Якщо ви бачите 1 - число належить цьому дiапазону." << endl;
_getch(); return 0; }
ЛогічнеАБО (||) Об’єднує 2 умови і повертає істину (true) тільки у тому випадку, коли хоча б одна з умов поверне істину. Результатом буде false, коли обидві умови дадуть false. Крім цього АБО працює за скороченою системою, якщо перша умова повертає true, то інша (друга умова) – взагалі не перевіряється.
Давайте знову напишемо програму яка перевіряє чи число a належить діапазону від 5 до 10. Але тепер будемо використовувати АБО. view source print? #include <iostream> #include <conio.h> using namespace std; int main() { setlocale(LC_CTYPE, "ukr"); float a; cin >> a; cout << ((a <= 5) || (a >= 10)) << endl; cout << "Якщо ви бачите 0 - число лежить у дiапазоні від 5 до 10"<< endl; cout << "Якщо ви бачите 1 - число не лежить у дiапазоні від 5 до 10" << endl;
_getch(); return 0; }
Логічне НЕ (!) Логічне НЕ є унарним оператором, тому він не може об’єднувати два критерії (як АБО чи І ). Він використовується у тому випадку коли потрібно змінити результат перевірки на протилежній.
Цей оператор змінює результат перевірки з true на false і з false – true.
|
Базовий курс програмування на С++. Урок 6. Оператори if та switch. Тернарний оператор |
Написав Joker |
Неділя, 21 грудня 2014 23:09 Переглядів: 2737 |
Сьогодні ми вивчимо:
1. Оператор if
2. Оператор switch
3. Тернарний оператор.
Оператор if
Зараз ми навчимося писати програми і змусимо їх думати ![]() |