02 arithmetic data types

27
Бублик Володимир Васильович Програмування - 2 Лекція 2. Базові поняття програмування. Арифметичні типи даних ftp://[email protected]/pro Лекції для студентів 2 курсу

Upload: olegapster

Post on 11-Jul-2015

562 views

Category:

Entertainment & Humor


0 download

TRANSCRIPT

Page 1: 02 Arithmetic Data Types

Бублик Володимир Васильович

Програмування - 2

Лекція 2. Базові поняття програмування.Арифметичні типи даних

ftp://[email protected]/programming2

Лекції для студентів 2 курсу

Page 2: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

2

Арифметичні типи даних

• Основні типи:– Логічний bool,– Символьний сhar, – Цілий int,– Дійсний (з подвоєною точністю) double

• Інші арифметичні типи служать предметом особливих застосувань (оптимізація, системне програмування, тощо).

Page 3: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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

Page 4: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

4

Доповнений код

• (Повторення)• Як обчислити двійковий код -1

3. Записати код 1

4. Інвертувати його

5. Додати 1: одержимо -1

00000001

11111111

11111110

Page 5: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

5

Доповнений код

• (Далі повторення)• Як обчислити двійковий код -128

3. Записати код 128

4. Інвертувати його

5. Додати 1: одержимо -128

• Пам'ятайте:

• 127 + 1 == -128 (sorry)

10000000

10000000

01111111

Page 6: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

6

Символьний тип

• char• Без знаку від 0 до 255 (FF) unsigned

• Зі знаком від -128 до 127 signed

00000000 11111111

10000000 01111111

Page 7: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

7

Короткий цілий тип

• short int• Без знаку від 0 до 65535 unsigned

• Зі знаком від -32768 до 32767 signed

0000000000000000 1111111111111111

0000000010000000 1111111101111111

Page 8: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

8

Дійсний тип

• float• порядок мантиса

• Мінімальний порядок -37, максимальний 38• Кількість десяткових знаків мантиси 6

00000000000000000000000000000000

Page 9: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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Логічний (булів)

Діапазон значеньПозначенняНазва типу

Page 10: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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;

Page 11: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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)

Page 12: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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;• }

Page 13: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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

Page 14: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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

Page 15: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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

Page 16: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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

Page 17: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

17

Перелік (enumeration)

• enum week• {• monday,• tuesday,• wednesday,• thursday,• friday,• saturday,• sunday• };• cout<<monday; //?

Page 18: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

18

Перелік (enumeration)

• enum week• {• monday = 1,• tuesday,• wednesday,• thursday,• friday,• saturday,• sunday• };• cout<<monday; //?

Page 19: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

19

Перелік (enumeration)

• enum number• {• two=2,• eight=8, • ten=10,• hex=16 • }

Page 20: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

20

Арифметичні операції

op1, op2Кома,

op1 - op2Віднімання-

op1 + op2Додавання+

op1 % op2Остача%

op1 / op2Ділення/

op1 * op2Множення*

Спосіб використанняНазваСимвол операції

Page 21: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

21

Операції порівняння

op1 != op2Не рівне!=

op1 == op2Рівне==(не плутати з =)

op1 >= op2Більше або рівне>=

op1 > op2Більше>

op1 <= op2Менше або рівне<=

op1 < op2Менше<

Спосіб використанняНазваСимвол операції

Найрозповсюдженіша помилка початківцівif (x=0) /*never come here*/; else cout<<x;

Page 22: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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; ?

Page 23: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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

Page 24: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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

Page 25: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

25

Логічні побітові операції

op1 | op2Диз’юнкція|

op1 ^ op2Виключна диз’юнкція

^

op1 & op2Кон’юнкція&

op1 >> op2Зсування вправо>>

op1 << op2Зсування вліво<<

~ opЗаперечення~

Спосіб використанняНазваСимвол операції

Page 26: 02 Arithmetic Data Types

© Бублик В.В. Програмування-2. 2. Базові поняття програмування. Арифметичні типи даних

26

Логічні побітові операції

• Програмування на низькому, близькому до машинного, рівні: найпростіше ці операції вживати до типу unsigned int або unsigned long (int), що відповідатиме роботі з машинними словами.

• У випадку коротших типів або при наявності знаку результат може залежати від типу компілятора.

Page 27: 02 Arithmetic Data Types

© Бублик В.В. Програмування-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