Бублик Володимир Васильович Процедурне програмування C/C++ Лекція 2. Базові поняття програмування. Арифметичні типи даних Лекції для студентів 2 курсу London, Tower
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 2 Арифметичні типи даних Основні типи: –Логічний bool: true, false, –Символьний сhar: a, b,… –Цілий int: 0, 1, -1, 2,… –Дійсний (з подвоєною точністю) double: 0.0, 3.14,… Інші арифметичні типи служать предметом особливих застосувань (оптимізація, системне програмування, тощо).
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 3 Логічний тип false < true bool b = true; cout << noboolalpha << b << " == " << boolalpha << b << endl; 1 == true false+false == false false+true == true true+false == true true+true == true
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 4 Доповнений код (Повторення) Як обчислити двійковий код -1 1.Записати код 1 2.Інвертувати його 3.Додати 1: одержимо
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 5 Доповнений код (Ще повторення) Як обчислити двійковий код Записати код Інвертувати його 3.Додати 1: одержимо -128 Пам'ятайте: == -128 (sorry)
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 6 Символьний тип char Без знаку від 0 до 255 (FF) unsigned Зі знаком від -128 до 127 signed
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 7 Короткий цілий тип short int Без знаку від 0 до unsigned Зі знаком від до signed
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 8 Дійсний тип float порядокмантиса Мінімальний порядок -37, максимальний 38 Кількість десяткових знаків мантиси
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 9 Арифметичні типи даних Назва типуПозначенняДіапазон значень Логічний (булів) bool false, true (true+true==true) Символьний сhar, unsigned сhar від 0 до 255 ( 255+1=0 ) signed сhar від -128 до 127 ( 127+1=-128 ) Цілий short (short int) Визначається з умов 1sizeof(char) sizeof(short) sizeof(int) sizeof(long); 1 sizeof(bool) sizeof(long); sizeof(N)sizeof(signed N)sizeof(unsigned N); unsigned short (unsigned short int) int (signed int) unsigned (unsigned int) long (long int) unsigned long (unsigned long int) Довгий символ wchar_t unsigned short Дійсний, звичайна точність float sizeof(float) sizeof(double) sizeof(long double) подвоєна точність double розширена точність long double
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 10 Розрядність #include using namespace std; int main() { bool b; char c; unsigned char cu; signed char csg; short s; short int is; signed short int issg; unsigned short int ius; unsigned short su; int i; signed int isg; unsigned int iu; signed sg; unsigned u; long int il; signed long int ilsg; long l; signed long lsg; unsigned long int ilu; unsigned long lu; float f; double d; long double ld;
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 11 Розрядність cout << "\n bool= " << sizeof(b) << "\n char= " << sizeof(c) << "\n unsigned char = " << sizeof(cu) << "\n signed char = " << sizeof(csg) << "\n short = " << sizeof(s) << "\n short int= " << sizeof(is) << "\n signed short int = " << sizeof(issg) << "\n unsigned short int = " << sizeof(ius) << "\n unsigned short = " << sizeof(su) << "\n int = " << sizeof(i)
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 12 Розрядність << "\n signed int = " << sizeof(isg) << "\n unsigned int = " << sizeof(iu) << "\n signed int = " << sizeof (isg) << "\n unsigned int = " << sizeof (iu) << "\n signed = " << sizeof (sg) << "\n unsigned= " << sizeof (u) << "\n long int= " << sizeof (il) << "\n signed long int= " << sizeof (ilsg) << "\n long = " << sizeof (l) << "\n signed long = " << sizeof (lsg)
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 13 Розрядність << "\n unsigned long int= " << sizeof(ilu) << "\n unsigned long = " << sizeof(lu) << "\n float = " << sizeof (f) << "\n double = " << sizeof (d) << "\n long double = " << sizeof (ld) << endl; return 0; }
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 14 Розрядність bool= 1 char= 1 unsigned char = 1 signed char = 1 short = 2 short int = 2 signed short int = 2 unsigned short int = 2 unsigned short = – 1 = – 1 =
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 15 Розрядність int = 4 signed int = 4 unsigned int = 4 signed = 4 unsigned= 4 long int = 4 signed long int = 4 long = 4 signed long = 4 unsigned long int = 4 unsigned long = = 2 2(2 10 ) 3 4 (10 3 ) 3 = – 1 = = 2 4(2 10 ) 6 16 (10 3 ) 6 = = Основна тотожність інформатики
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 16 Розрядність float = 4 Скільки десяткових знаків містить дійсне число? double = 8 long double = 8 Скільки десяткових знаків містить дійсне число подвоєної точності? 2 32 = 2 2(2 10 ) 3 4 (10 3 ) 3 = – 1 = = 2 4(2 10 ) 6 16 (10 3 ) 6 = = Як кодуються дійсні числа?
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 17 Стандартна бібліотека #include Приклади застосування numeric_limits ::min();// numeric_limits ::max();// numeric_limits ::max();// numeric_limits ::max();// e+038 numeric_limits ::max(); // e+308 numeric_limits ::max_exponent10; //308 numeric_limits ::digits10;//15
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 18 Перелік (enumeration) enum week { monday, tuesday, wednesday, thursday, friday, saturday, sunday }; cout<<monday;//?
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 19 Ініціалізований перелік enum week { monday = 1, tuesday, wednesday, thursday, friday, saturday, sunday }; cout<<monday;//?
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 20 Розріджений перелік enum number { two=2, eight=8, ten=10, hex=16 };
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 21 Арифметичні операції Символ операціїНазваСпосіб використання * Множення op1 * op2 / Ділення op1 / op2 % Остача op1 % op2 + Додавання op1 + op2 - Віднімання op1 - op2, Кома op1, op2
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 22 Операції порівняння Символ операціїНазваСпосіб використання < Менше op1 < op2 <= Менше або рівне op1 <= op2 > Більше op1 > op2 >= Більше або рівне op1 >= op2 == (не плутати з =) Рівне op1 == op2 != Не рівне op1 != op2 Найрозповсюдженіша помилка початківців if (x=0) /*never come here*/; else cout<<x;
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 23 Логічні операції Символ операціїНазваСпосіб використання ! Заперечення ! op && Конюнкція op1 && op2 || Дизюнкція op1 || op2 ? : Імплікація (true ? x: y) == x (false ? x: y) == y (op1 ? op2: op3) Чим (x < y ? x : y) відрізняється від if (x<y) x; else y; ?
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 24 Двійкові коди цілих чисел чи чи - 1
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 25 Шістнадцяткові коди цілих чисел 0 7 FF F
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 26 Логічні побітові операції Символ операціїНазваСпосіб використання ~ Заперечення ~ op << Зсування вліво op1 << op2 >> Зсування вправо op1 >> op2 & Конюнкція op1 & op2 ^ Виключна дизюнкція op1 ^ op2 | Дизюнкція op1 | op2
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 27 Логічні побітові операції Програмування на низькому, близькому до машинного, рівні: найпростіше ці операції вживати до типу unsigned int або unsigned long (int), що відповідатиме роботі з машинними словами. У випадку коротших типів або при наявності знаку результат може залежати від типу компілятора.
© 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 28 Логічні побітові операції Приклад unsigned int a = ; // fb fc fd fe int k = 0; cout >k)&0xff<<endl;// fb fc fd fe k = 8; cout >k)&0xff<<endl;// 00 fb fc fd k =16; cout >k)&0xff<<endl;// fb fc k =24; cout >k)&0xff<<endl;// fb
Висновок Слідкуйте за типами Чи може статися таке, що (x/2)*2 != x? x+1 == x? x+1 < x? (x+x)/2 != x? © 2006 Бублик В.В. Процедурне програмування. 2. Базові поняття програмування. Арифметичні типи даних 29