02 arithmetic data types
TRANSCRIPT
Бублик Володимир Васильович
Програмування - 2
Лекція 2. Базові поняття програмування.Арифметичні типи даних
ftp://[email protected]/programming2
Лекції для студентів 2 курсу
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
2
Арифметичні типи даних
• Основні типи:– Логічний bool,– Символьний сhar, – Цілий int,– Дійсний (з подвоєною точністю) double
• Інші арифметичні типи служать предметом особливих застосувань (оптимізація, системне програмування, тощо).
© Бублик В.В. Програмування-2. 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
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
4
Доповнений код
• (Повторення)• Як обчислити двійковий код -1
3. Записати код 1
4. Інвертувати його
5. Додати 1: одержимо -1
00000001
11111111
11111110
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
5
Доповнений код
• (Далі повторення)• Як обчислити двійковий код -128
3. Записати код 128
4. Інвертувати його
5. Додати 1: одержимо -128
• Пам'ятайте:
• 127 + 1 == -128 (sorry)
10000000
10000000
01111111
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
6
Символьний тип
• char• Без знаку від 0 до 255 (FF) unsigned
• Зі знаком від -128 до 127 signed
00000000 11111111
10000000 01111111
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
7
Короткий цілий тип
• short int• Без знаку від 0 до 65535 unsigned
• Зі знаком від -32768 до 32767 signed
0000000000000000 1111111111111111
0000000010000000 1111111101111111
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
8
Дійсний тип
• float• порядок мантиса
• Мінімальний порядок -37, максимальний 38• Кількість десяткових знаків мантиси 6
00000000000000000000000000000000
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
9
Арифметичні типи даних
long doubleрозширена точність
doubleподвоєна точність
sizeof(float) ≤ sizeof(double) ≤
sizeof(long double)
floatДійсний, звичайна точність
unsigned shortwchar_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Логічний (булів)
Діапазон значеньПозначенняНазва типу
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
10
Розрядність
• #include <iostream>• 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;
© Бублик В.В. Програмування-2. 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)• << "\n signed int = " << sizeof(isg)• << "\n unsigned int = " << sizeof(iu)
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
12
Розрядність
• << "\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)• << "\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;• }
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
13
Розрядність
• 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 = 2
• 28 – 1 = 255
• 216 – 1 = 32 677
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
14
Розрядність
• 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 = 4
“Основна тотожність інформатики”
• 210 ≈ 103
• 232 = 22∙(210)3 ≈ 4 ∙ (103)3 = 4 ∙ 109
4 000 000 000• 232 – 1 = 4 294 967 295
• 264 = 24∙(210)6 ≈ 16 ∙ (103)6 = 16 ∙ 1018 = 16 000 000 000 000 000 000
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
15
Розрядність
• Як кодуються дійсні числа?
• float = 4• Скільки десяткових знаків
містить дійсне число?
• double = 8• long double = 8• Скільки десяткових знаків
містить дійсне число подвоєної точності?
• 232 = 22∙(210)3 ≈ 4 ∙ (103)3 = 4 ∙ 109
4 000 000 000• 232 – 1 = 4 294 967 295
• 264 = 24∙(210)6 ≈ 16 ∙ (103)6 = 16 ∙ 1018 = 16 000 000 000 000 000 000
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
16
Стандартна бібліотека
• #include <limits>
• Приклади застосування
• numeric_limits<short>::min();• numeric_limits<unsigned int>::max();• numeric_limits<float>::max();• numeric_limits<double>::max_exponent10;• numeric_limits<double>::digits10
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
17
Перелік (enumeration)
• enum week• {• monday,• tuesday,• wednesday,• thursday,• friday,• saturday,• sunday• };• cout<<monday; //?
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
18
Перелік (enumeration)
• enum week• {• monday = 1,• tuesday,• wednesday,• thursday,• friday,• saturday,• sunday• };• cout<<monday; //?
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
19
Перелік (enumeration)
• enum number• {• two=2,• eight=8, • ten=10,• hex=16 • }
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
20
Арифметичні операції
op1, op2Кома,
op1 - op2Віднімання-
op1 + op2Додавання+
op1 % op2Остача%
op1 / op2Ділення/
op1 * op2Множення*
Спосіб використанняНазваСимвол операції
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
21
Операції порівняння
op1 != op2Не рівне!=
op1 == op2Рівне==(не плутати з =)
op1 >= op2Більше або рівне>=
op1 > op2Більше>
op1 <= op2Менше або рівне<=
op1 < op2Менше<
Спосіб використанняНазваСимвол операції
Найрозповсюдженіша помилка початківцівif (x=0) /*never come here*/; else cout<<x;
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
22
Логічні операції
(op1 ? op2: op3)Імплікація
(true ? x: y) == x(false ? x: y) == y
? :
op1 || op2Диз’юнкція||
op1 && op2Кон’юнкція&&
! opЗаперечення!
Спосіб використанняНазваСимвол операції
Чим (x < y ? x : y) відрізняється від if (x<y) x; else y; ?
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
23
Двійкові коди цілих чисел
00000000000000000000000000000000
11111111111111111111111101111111 2 147 483 647
00000000000000000000000010000000 2 147 483 648чи - 2 147 483 648
11111111111111111111111111111111
0
4 294 967 295чи - 1
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
24
Шістнадцяткові коди цілих чисел
0 0 0 0 0 00 0
F FF FF F7 F 2 147 483 647
0 00 00 08 0 2 147 483 648
F FF FF FF F
0
4 294 967 295
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
25
Логічні побітові операції
op1 | op2Диз’юнкція|
op1 ^ op2Виключна диз’юнкція
^
op1 & op2Кон’юнкція&
op1 >> op2Зсування вправо>>
op1 << op2Зсування вліво<<
~ opЗаперечення~
Спосіб використанняНазваСимвол операції
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
26
Логічні побітові операції
• Програмування на низькому, близькому до машинного, рівні: найпростіше ці операції вживати до типу unsigned int або unsigned long (int), що відповідатиме роботі з машинними словами.
• У випадку коротших типів або при наявності знаку результат може залежати від типу компілятора.
© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних
27
Логічні побітові операції
• Приклад• unsigned int a = 4227661310; //fbfcfdfe • int k = 0;• cout <<(a>>k)&0xff<<endl; // fbfcfdfe• k = 8;• cout <<(a>>k)&0xff<<endl; // 00fbfcfd• k =16;• cout <<(a>>k)&0xff<<endl; // 0000fbfc• k =24;• cout <<(a>>k)&0xff<<endl; // 000000fb