02 Arithmetic Data Types

631 views
593 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
631
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

02 Arithmetic Data Types

  1. 1. Бублик Володимир Васильович Програмування - 2 Лекція 2. Базові поняття програмування. Арифметичні типи даних ftp://student@ftp.unicyb.kiev.ua/programming2 Лекції для студентів 2 курсу
  2. 2. Арифметичні типи даних <ul><li>Основні типи: </li></ul><ul><ul><li>Логічний bool, </li></ul></ul><ul><ul><li>Символьний сhar, </li></ul></ul><ul><ul><li>Цілий int, </li></ul></ul><ul><ul><li>Дійсний (з подвоєною точністю) double </li></ul></ul><ul><li>Інші арифметичні типи служать предметом особливих застосувань (оптимізація, системне програмування, тощо). </li></ul>
  3. 3. Логічний тип <ul><li>false < true </li></ul><ul><li>bool b = true; </li></ul><ul><li>cout << noboolalpha << b << &quot; == &quot; </li></ul><ul><li><< boolalpha << b << endl; </li></ul><ul><li>1 == true </li></ul><ul><li>false + false == false </li></ul><ul><li>false + true == true </li></ul><ul><li>true + false == true </li></ul><ul><li>true + true == true </li></ul>
  4. 4. Доповнений код <ul><li>(Повторення) </li></ul><ul><li>Як обчислити двійковий код -1 </li></ul><ul><li>Записати код 1 </li></ul><ul><li>Інвертувати його </li></ul><ul><li>Додати 1: одержимо -1 </li></ul>0000000 1 1 1111111 1 111111 0
  5. 5. Доповнений код <ul><li>(Далі повторення) </li></ul><ul><li>Як обчислити двійковий код -128 </li></ul><ul><li>Записати код 128 </li></ul><ul><li>Інвертувати його </li></ul><ul><li>Додати 1: одержимо -128 </li></ul><ul><li>Пам'ятайте: </li></ul><ul><li>127 + 1 == -128 ( sorry ) </li></ul>10000000 1 0000000 0 111111 1
  6. 6. Символьний тип <ul><li>char </li></ul><ul><li>Без знаку від 0 до 255 ( FF) unsigned </li></ul><ul><li>Зі знаком від -128 до 127 signed </li></ul>00000000 11111111 1 0000000 0 1111111
  7. 7. Короткий цілий тип <ul><li>short int </li></ul><ul><li>Без знаку від 0 до 65535 unsigned </li></ul><ul><li>Зі знаком від -32768 до 32767 signed </li></ul>00000000 0 0000000 11111111 11111111 00000000 1 0000000 11111111 0 1111111
  8. 8. Дійсний тип <ul><li>float </li></ul><ul><li>порядок мантиса </li></ul><ul><li>Мінімальний порядок -37, максимальний 38 </li></ul><ul><li>Кількість десяткових знаків мантиси 6 </li></ul>00000000 00000000 0 0000000 0 0000000
  9. 9. Арифметичні типи даних long double розширена точність double подвоєна точність sizeof(float) ≤ sizeof(double) ≤ sizeof(long double) float Дійсний, звичайна точність unsigned short wchar_t Довгий символ unsigned long (unsigned long int) long (long int) unsigned (unsigned int) int (signed int) unsigned short (unsigned short int) Визначається з умов 1≡sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long); 1≤ sizeof(bool)≤ sizeof(long); sizeof(N)≡sizeof(signed N) ≡sizeof(unsigned N); short (short int) Цілий від -128 до 127 ( 127+1=-128 ) signed сhar від 0 до 255 ( 255+1=0 ) сhar, unsigned сhar Символьний false, true (true+true==true) bool Логічний (булів) Діапазон значень Позначення Назва типу
  10. 10. Розрядність <ul><li>#include <iostream> </li></ul><ul><li>using namespace std; </li></ul><ul><li>int main() </li></ul><ul><li>{ </li></ul><ul><li>bool b; </li></ul><ul><li>char c; </li></ul><ul><li>unsigned char cu; </li></ul><ul><li>signed char csg; </li></ul><ul><li>short s; </li></ul><ul><li>short int is; </li></ul><ul><li>signed short int issg; </li></ul><ul><li>unsigned short int ius; </li></ul><ul><li>unsigned short su; </li></ul><ul><li>int i; </li></ul><ul><li>signed int isg; </li></ul><ul><li>unsigned int iu; </li></ul><ul><li>signed sg; </li></ul><ul><li>unsigned u; </li></ul><ul><li>long int il; </li></ul><ul><li>signed long int ilsg; </li></ul><ul><li>long l; </li></ul><ul><li>signed long lsg; </li></ul><ul><li>unsigned long int ilu; </li></ul><ul><li>unsigned long lu; </li></ul><ul><li>float f; </li></ul><ul><li>double d; </li></ul><ul><li>long double ld; </li></ul>
  11. 11. Розрядність <ul><li>cout </li></ul><ul><li><< &quot; bool= &quot; << sizeof(b) </li></ul><ul><li><< &quot; char= &quot; << sizeof(c) </li></ul><ul><li><< &quot; unsigned char = &quot; << sizeof(cu) </li></ul><ul><li><< &quot; signed char = &quot; << sizeof(csg) </li></ul><ul><li><< &quot; short = &quot; << sizeof(s) </li></ul><ul><li><< &quot; short int= &quot; << sizeof(is) </li></ul><ul><li><< &quot; signed short int = &quot; << sizeof(issg) </li></ul><ul><li><< &quot; unsigned short int = &quot; << sizeof(ius) </li></ul><ul><li><< &quot; unsigned short = &quot; << sizeof(su) </li></ul><ul><li><< &quot; int = &quot; << sizeof(i) </li></ul><ul><li><< &quot; signed int = &quot; << sizeof(isg) </li></ul><ul><li><< &quot; unsigned int = &quot; << sizeof(iu) </li></ul>
  12. 12. Розрядність <ul><li><< &quot; signed int = &quot; << sizeof(isg) </li></ul><ul><li><< &quot; unsigned int = &quot; << sizeof(iu) </li></ul><ul><li><< &quot; signed = &quot; << sizeof(sg) </li></ul><ul><li><< &quot; unsigned= &quot; << sizeof(u) </li></ul><ul><li><< &quot; long int= &quot; << sizeof(il) </li></ul><ul><li><< &quot; signed long int= &quot; << sizeof(ilsg) </li></ul><ul><li><< &quot; long = &quot; << sizeof(l) </li></ul><ul><li><< &quot; signed long = &quot; << sizeof(lsg) </li></ul><ul><li><< &quot; unsigned long int= &quot; << sizeof(ilu) </li></ul><ul><li><< &quot; unsigned long = &quot; << sizeof(lu) </li></ul><ul><li><< &quot; float = &quot; << sizeof(f) </li></ul><ul><li><< &quot; double = &quot; << sizeof(d) </li></ul><ul><li><< &quot; long double = &quot; << sizeof(ld) </li></ul><ul><li><< endl; </li></ul><ul><li>return 0; </li></ul><ul><li>} </li></ul>
  13. 13. Розрядність <ul><li>bool= 1 </li></ul><ul><li>char= 1 </li></ul><ul><li>unsigned char = 1 </li></ul><ul><li>signed char = 1 </li></ul><ul><li>short = 2 </li></ul><ul><li>short int= 2 </li></ul><ul><li>signed short int = 2 </li></ul><ul><li>unsigned short int = 2 </li></ul><ul><li>unsigned short = 2 </li></ul><ul><li>2 8 – 1 = 255 </li></ul><ul><li>2 16 – 1 = 32 677 </li></ul>
  14. 14. Розрядність <ul><li>int = 4 </li></ul><ul><li>signed int = 4 </li></ul><ul><li>unsigned int = 4 </li></ul><ul><li>signed = 4 </li></ul><ul><li>unsigned= 4 </li></ul><ul><li>long int= 4 </li></ul><ul><li>signed long int= 4 </li></ul><ul><li>long = 4 </li></ul><ul><li>signed long = 4 </li></ul><ul><li>unsigned long int= 4 </li></ul><ul><li>unsigned long = 4 </li></ul><ul><li>“ Основна тотожність інформатики” </li></ul><ul><li>2 10 ≈ 10 3 </li></ul><ul><li>2 32 = 2 2 ∙ (2 10 ) 3 ≈ </li></ul><ul><li>4 ∙ ( 10 3 ) 3 = 4 ∙ 10 9 </li></ul><ul><li>4 000 000 000 </li></ul><ul><li>2 32 – 1 = 4 294 967 295 </li></ul><ul><li>2 64 = 2 4 ∙ (2 10 ) 6 ≈ </li></ul><ul><li>16 ∙ ( 10 3 ) 6 = 16 ∙ 10 18 = </li></ul><ul><li>16 000 000 000 000 000 000 </li></ul>
  15. 15. Розрядність <ul><li>Як кодуються дійсні числа? </li></ul><ul><li>float = 4 </li></ul><ul><li>Скільки десяткових знаків містить дійсне число? </li></ul><ul><li>double = 8 </li></ul><ul><li>long double = 8 </li></ul><ul><li>Скільки десяткових знаків містить дійсне число подвоєної точності? </li></ul><ul><li>2 32 = 2 2 ∙ (2 10 ) 3 ≈ </li></ul><ul><li>4 ∙ ( 10 3 ) 3 = 4 ∙ 10 9 </li></ul><ul><li>4 000 000 000 </li></ul><ul><li>2 32 – 1 = 4 294 967 295 </li></ul><ul><li>2 64 = 2 4 ∙ (2 10 ) 6 ≈ </li></ul><ul><li>16 ∙ ( 10 3 ) 6 = 16 ∙ 10 18 = </li></ul><ul><li>16 000 000 000 000 000 000 </li></ul>
  16. 16. Стандартна бібліотека <ul><li>#include <limits> </li></ul><ul><li>Приклади застосування </li></ul><ul><li>numeric_limits< short >::min(); </li></ul><ul><li>numeric_limits< unsigned int >::m ax (); </li></ul><ul><li>numeric_limits< float >::max(); </li></ul><ul><li>numeric_limits< double >::max_exponent10; </li></ul><ul><li>numeric_limits< double >::digits10 </li></ul>
  17. 17. Перелік ( enumeration ) <ul><li>enum week </li></ul><ul><li>{ </li></ul><ul><li>monday, </li></ul><ul><li>tuesday, </li></ul><ul><li>wednesday, </li></ul><ul><li>thursday, </li></ul><ul><li>friday, </li></ul><ul><li>saturday, </li></ul><ul><li>s unday </li></ul><ul><li>} ; </li></ul><ul><li>cout<<monday; //? </li></ul>
  18. 18. Перелік ( enumeration ) <ul><li>enum week </li></ul><ul><li>{ </li></ul><ul><li>m onday = 1 , </li></ul><ul><li>tuesday, </li></ul><ul><li>wednesday, </li></ul><ul><li>thursday, </li></ul><ul><li>friday, </li></ul><ul><li>saturday, </li></ul><ul><li>s unday </li></ul><ul><li>} ; </li></ul><ul><li>cout<<monday; //? </li></ul>
  19. 19. Перелік ( enumeration ) <ul><li>enum number </li></ul><ul><li>{ </li></ul><ul><li>two=2, </li></ul><ul><li>eight=8, </li></ul><ul><li>ten=10, </li></ul><ul><li>hex=16 </li></ul><ul><li>} </li></ul>
  20. 20. Арифметичні операції op1, op2 Кома , op1 - op2 Віднімання - op1 + op2 Додавання + op1 % op2 Остача % op1 / op2 Ділення / op1 * op2 Множення * Спосіб використання Назва Символ операції
  21. 21. Операції порівняння Найрозповсюдженіша помилка початківців if (x=0) /*never come here*/; else cout<<x; op1 != op2 Не рівне != op1 == op2 Рівне == (не плутати з =) op1 >= op2 Більше або рівне >= op1 > op2 Більше > op1 <= op2 Менше або рівне <= op1 < op2 Менше < Спосіб використання Назва Символ операції
  22. 22. Логічні операції Чим ( x < y ? x : y) відрізняється від if (x<y) x; else y; ? (op1 ? op2: op3) Імплікація (true ? x: y) == x (false ? x: y) == y ? : op1 || op2 Диз’юнкція || op1 && op2 Кон’юнкція && ! op Заперечення ! Спосіб використання Назва Символ операції
  23. 23. Двійкові коди цілих чисел 2 147 483 647 2 147 483 648 чи - 2 147 483 648 0 4 294 967 295 чи - 1 00000000 00000000 00000000 0 0000000 11111111 11111111 11111111 0 1111111 00000000 00000000 00000000 1 0000000 11111111 11111111 11111111 1 1111111
  24. 24. Шістнадцяткові коди цілих чисел 2 147 483 647 2 147 483 648 0 4 294 967 295 0 0 0 0 0 0 0 0 F F F F F F 7 F 0 0 0 0 0 0 8 0 F F F F F F F F
  25. 25. Логічні побітові операції op1 | op2 Диз’юнкція | op1 ^ op2 Виключна диз’юнкція ^ op1 & op2 Кон’юнкція & op1 >> op2 Зсування вправо >> op1 << op2 Зсування вліво << ~ op Заперечення ~ Спосіб використання Назва Символ операції
  26. 26. Логічні побітові операції <ul><li>Програмування на низькому, близькому до машинного, рівні: найпростіше ці операції вживати до типу unsigned int або unsigned long (int) , що відповідатиме роботі з машинними словами. </li></ul><ul><li>У випадку коротших типів або при наявності знаку результат може залежати від типу компілятора. </li></ul>
  27. 27. Логічні побітові операції <ul><li>Приклад </li></ul><ul><li>unsigned int a = 42276613 1 0 ; // fbfcfdfe </li></ul><ul><li>int k = 0; </li></ul><ul><li>cout << (a>>k)&0xff <<endl; // fb fcfd fe </li></ul><ul><li>k = 8; </li></ul><ul><li>cout << (a>>k)&0xff <<endl; // 00 fbfc fd </li></ul><ul><li>k =16; </li></ul><ul><li>cout << (a>>k)&0xff <<endl; // 0000 fb fc </li></ul><ul><li>k =24; </li></ul><ul><li>cout << (a>>k)&0xff <<endl; // 000000 fb </li></ul>

×