Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Консп_лекцій_Частина_1. Основи представлення с.doc
Скачиваний:
9
Добавлен:
06.11.2018
Размер:
839.68 Кб
Скачать

4. Базові типи даних

4.1. Порожній тип

Порожній тип (void) синтаксично поводиться як базовий тип. Однак використовувати його можна тільки як частину похідного типу, оскільки об'єктів типу voіd не існує. Він використовується для того, щоб вказати, що функція не повертає ніякого значення, або як базовий тип для вказівників на об'єкти невідомого типу, наприклад:

void f() // функція f не повертає ніякого значення

void* pv; // вказівник на объект невідомого типу

4.2. Логічний тип даних

В мові C++ логічний тип (bool) характеризується двома значеннями: false (0) і true (1). На відміну від мови С++ в мові С логічний тип даних іменується Bool, але при включенні заголовочного файлу <stdbool.h> можна використовувати ключові слова bool, true, false.

В пам'яті комп'ютера змінна типу bool займає 1 байт. Логічні значення можна асоціювати зі значеннями типу int: значенню false відповідає нуль, значенню true відповідають всі інші числа.

В арифметичних і логічних виразах логічні значення перетворюються в цілі числа. Арифметичні та бітові логічні операції виконуються над перетвореними величинами. Якщо результат приводиться знову до логічного типу, то 0 перетворюється в false, а ненульове значення перетворюється в true.

Приклад 1.

bool x = true; // в пам’яті комп’ютера змінна х зберігається як послідовність: 0000 0000

bool y = false; // в пам’яті комп’ютера змінна y зберігається як послідовність: 0000 0001

bool a = 2*x+y; // значення виразу 2*x+y дорівнює 2, тому змінна a отримує значення

// true (1); отже, в пам’яті комп’ютера змінна a зберігається як наступна

// послідовність біт: 0000 0001 (або в 16-ковій системі числення як 01).

4.3. Символьні типи даних

Ідентифікатором символьного типу є ключове слово char.

Символьні константи (символьні літерали) можна представляти як:

  1. клавіатурні: '1','s','Y' – записуються як символи в одинарних лапках;

  2. кодові: '\n','\\','\?', які використовуються для представлення деяких керуючих символів та символів-розділювачів – записуються як escape-послідовності (вони починаються з символу зворотної косої риски). Перелік кодових символьних літералів наведено в Таблиці 4.1.

Таблиця 4.1.

Назва

Кодові символьні літерали

Код

Новий рядок

\n

0A

Горизонтальна табуляція

\t

09

Забій

\b

08

Вертикальна табуляція

\v

0B

Повернення каретки

\r

0D

Прогін аркуша

\f

0C

Дзвінок

\a

07

Зворотня коса риска

\\

5C

Знак питання

\?

3F

Одиночні лапки

\'

27

Подвійні лапки

\"

22

Не дивлячись на свій зовнішній вигляд, це одиночні символи.

3) кодові числові: '\0','\x5C','\124', які використовуються для представлення будь-яких символів – записуються у вигляді однієї, двох або трьох вісімкових цифр з символом зворотної косої риски ( \ ) перед ними або довільним шістнадцятковим числом з послідовністю \х перед ним. Послідовність вісімкових або шістнадцяткових цифр закінчується першим символом, який не є відповідно вісімковою або шістнадцятковою цифрою. Приклади таких представлень наведені в Таблиці 4.2.

Таблиця 4.2.

Десяткова

Вісімкова

Шістнадцяткова

Символ

7

'\7'

'\x7'

Дзвінок

48

'\60'

'\x30'

'0'

50

'\062'

'\x32'

'2'

95

'\137'

'\x005f'

'_'

Значеннями змінних типу char є множина символів таблиці ASCII (American Standard Code For Information Interchange – американський стандартний код для обміну інформацією). Таблиця кодів ASCІІ містить 256 символів, кожний з яких має строго визначене місце і свій порядковий номер від 0 до 255. Код символу - це його порядковий номер у таблиці символів ASCІІ.

Таблиця кодів ASCІІ складається з 2 таблиць:

1. Основної ( з кодами від 0 до 127). Вона містить у собі:

- символи керування,

- символи арифметичних операцій, розділові знаки, цифри,

- букви латинського алфавіту (прописні, рядкові).

2. Розширеної ( з кодами від 128 до 255). Вона містить у собі:

- символи псевдографіки (символи, що застосовуються для побудови найпростіших фігур),

- букви національних алфавітів,

- математичні символи.

Всі символи, крім символів керування, є графічними. Вони на пристроях зображення відображаються, а в таблиці кодів ASCІІ мають графічне зображення.

Символи з кодами від 0 до 31 і код 127 відносяться до керуючих. В текстовому режимі їм відповідають графічні зображення. При використанні цих символів або кодів в операціях виведення вони набувають самостійного значення. Приклади символів керування наведені в Таблиці 4.3.

Таблиця 4.3

Символ

Код

Значення

BEL

7

Дзвоник. Виведення на екран цього символу супроводжується звуковим сигналом.

НТ

9

Горизонтальна табуляція. При виведенні на екран зміщує курсор у позицію, кратну 8 плюс 1 (9, 17, 25 і т.д.).

LF

10

Перехід рядка. При виведенні його на екран всі наступні символи будуть виводитися, починаючи з тієї ж позиції, але на наступному рядку.

VT

11

Вертикальна табуляція. При виведенні на екран замінюється спеціальним знаком ().

FF

12

Прогін сторінки. При виведенні на принтер формує нову сторінку, при виведенні на екран замінюється спеціальним знаком (♀).

CR

13

Повернення каретки. Вводиться натисканням на клавішу Enter. При введенні за допомогою операторів мови програмування означає команду "введення" і в буфер введення не кладеться. При виведенні означає команду "продовжити виведення з початку біжучого рядка"

SUB

26

Кінець файлу. Вводиться з клавіатури натисканням Ctrl - Z. При виведенні заміняється спеціальним знаком (→).

SSC

27

Кінець роботи. Вводиться з клавіатури натисканням на клавішу ESC. При виведенні заміняється спеціальним знаком (←).

Перша основна половина символів таблиці ASCII (коди 0...127) побудована по стандарту ASCІІ і вона є однаковою на всіх ІBM-сумісних комп’ютерах. Принцип послідовного кодування алфавіту полягає в тому, що в кодовій таблиці ASCII латинські букви (прописні та строчні) розташовуються в алфавітному порядку. Розташування цифр також впорядковано по зростанню їх значень.

Друга половина символів (коди 128...255) може відрізнятися на комп’ютерах різного типу. У стандартному знакогенераторі фірми ІBM символи псевдографіки займають позиції з кодами від 176 до 223. Позиції з кодами від 128 до 175 і від 224 до 239 використовуються для розміщення деяких символів національних алфавітів різних європейських мов, а позиції з кодами від 240 до 255 - для розміщення спеціальних знаків. З врахуванням цього розташування символів розробляється переважна більшість програм закордонного походження.

Стандартний вітчизняний знакогенератор був побудований за рекомендаціями Міжнародного консультаційного комітету з телеграфії і телефонії (МККТТ). Розташування символів у другій половині таблиці цього знакогенератора відрізнялось від прийнятого фірмою ІBM, що утруднювало використання закордонного програмного забезпечення на вітчизняних ПК. У зв'язку з цим, стандартний варіант кодування був заміняний альтернативним, головна перевага якого - розташування символів псевдографіки на тих же місцях, що й у знакогенераторі ІBM. Недолік такого знакогенератора полягає у тому, що символи кирилиці не утворюють безперервну послідовність. Такий варіант у даний час одержав найбільше поширення на вітчизняних ПК. Саме на нього розраховані практично всі програми вітчизняного виробництва. Він став фактичним стандартом для закордонних фірм, що виготовляють комп'ютери для експорту в нашу країну.

Таблиця символів ASCII наведена в Таблиці 4.4. В ній прийняті такі позначення:

DEC – код в 10-ковій системі числення,

HEX – код в 16-ковій системі числення,

CH – символ.

Таблиця 4.4

DEC

HEX

CH

DEC

HEX

CH

DEC

HEX

CH

DEC

HEX

CH

DEC

HEX

CH

DEC

HEX

CH

DEC

HEX

CH

DEC

HEX

CH

0

0

32

20

64

40

@

96

60

`

128

80

А

160

A0

а

192

C0

224

E0

р

1

1

33

21

!

65

41

A

97

61

a

129

81

Б

161

A1

б

193

С1

225

El

с

2

2

34

22

66

42

B

98

62

b

130

82

В

162

A2

в

194

C2

226

E2

т

3

3

35

23

#

67

43

C

99

63

c

131

83

Г

163

A3

г

195

C3

227

E3

у

4

4

36

24

$

68

44

D

100

64

d

132

84

Д

164

A4

д

196

C4

228

E4

ф

5

5

37

25

%

69

45

E

101

65

e

133

85

Е

165

A5

е

197

C5

229

E5

х

6

6

38

26

&

70

46

F

102

66

f

134

86

Ж

166

A6

ж

198

C6

230

E6

ц

7

7

39

27

'

71

47

G

103

67

g

135

87

З

167

A7

з

199

C7

231

E7

ч

8

8

40

28

(

72

48

H

104

68

h

136

88

И

168

A8

и

200

C8

232

E8

ш

9

9

41

29

)

73

49

I

105

69

i

137

89

Й

169

A9

й

201

C9

233

E9

щ

10

A

42

2A

*

74

4A

J

106

6A

j

138

8A

К

170

AA

к

202

CA

234

EA

ъ

11

B

43

2B

+

75

4B

K

107

6B

k

139

8B

Л

171

AB

л

203

CB

235

EB

ы

12

C

44

2C

,

76

4C

L

108

6C

1

140

8C

М

172

AC

м

204

CC

236

EC

ь

13

D

45

2D

-

77

4D

M

109

6D

m

141

8D

Н

173

AD

н

205

CD

237

ED

э

14

E

46

2E

.

78

4E

N

110

6E

n

142

8E

О

174

AE

о

206

CE

238

EE

ю

15

F

47

2F

/

79

4F

O

111

6F

o

143

8F

П

175

AF

п

207

CF

239

EF

я

16

10

48

30

0

80

50

P

112

70

p

144

90

Р

176

B0

208

D0

240

F0

Ё

17

11

49

31

1

81

51

Q

113

71

q

145

91

С

177

В1

209

Dl

241

Fl

ё

18

12

50

32

2

82

52

R

114

72

r

146

92

Т

178

B2

210

D2

242

F2

Є

19

13

51

33

3

83

53

S

115

73

s

147

93

У

179

B3

211

D3

243

F3

є

20

14

52

34

4

84

54

T

116

74

t

148

94

Ф

180

B4

212

D4

244

F4

Ї

21

15

§

53

35

5

85

55

U

117

75

u

149

95

Х

181

B5

213

D5

245

F5

ї

22

16

54

36

6

86

56

V

118

76

v

150

96

Ц

182

B6

214

D6

246

F6

І

23

17

55

37

7

87

57

W

119

77

w

151

97

Ч

183

B7

215

D7

247

F7

і

24

18

56

38

8

88

58

X

120

78

x

152

98

Ш

184

B8

216

D8

248

F8

°

25

19

57

39

9

89

59

Y

121

79

y

153

99

Щ

185

B9

217

D9

249

F9

26

1A

58

3A

:

90

5A

Z

122

7A

z

154

9A

Ъ

186

BA

218

DA

250

FA

·

27

1B

59

3B

;

91

5B

[

123

7B

{

155

9B

Ы

187

BB

219

DB

251

FB

28

1C

60

3C

<

92

5C

\

124

7C

|

156

9C

Ь

188

BC

220

DC

252

FC

29

ID

(

61

3D

=

93

5D

]

125

7D

}

157

9D

Э

189

BD

221

DD

253

FD

¤

30

1E

62

3E

>

94

5E

^

126

7E

~

158

9E

Ю

190

BE

222

DE

254

FE

31

IF

63

3F

?

95

5F

_

127

7F



159

9F

Я

191

BF

223

DF

255

FF

 

В пам’яті комп’ютера дані символьного типу зазвичай займають 1 байт. В цей байт записується порядковий номер символа в таблиці ASCII.

Приклад 2.

За системою ASCII символ ’O’ має порядковий номер 7910 = 4F16 = 10011112

Отже, цей символ в пам’яті комп’ютера буде представлений як послідовність 0100 1111.

Оскільки значенню типу char відводиться 8 бітів, то значення типу unsigned char має значення в діапазоні від 0 до 255, a signed char – від -128 до 127, але тільки величини від 0 до 127 мають символьний еквівалент. Чи є значення типу просто char знаковим чи беззнаковим, залежить від реалізації, але в будь-якому випадку коди друкованих символів завжди є додатніми. Далі будемо вважати, що тип char є знаковим.

Таблиця 4.5

Тип

Розмір пам'яті в байтах 16 (32)

Діапазон значень

[signed] char

1 (1)

-128..127

unsigned char

1 (1)

0..255

Для представлення символів українського алфавіту, специфікатор типу даних повинен мати вигляд unsigned char, тому що коди українських літер перевищують величину 127.

Протягом довгого часу поняття "байт" і "символ" були майже синонімами. Однак, з часом, стало зрозуміло, що 256 різних символів – це не так і багато. Математикам необхідно використовувати в формулах спеціальні математичні знаки, перекладачам необхідно створювати тексти, де можуть зустрічатися символи з різних алфавітів, економістам необхідні символи валют ($, £, ¥). Для вирішення цих проблем була розроблена універсальна система кодування текстової інформації – Unicode. В цьому кодуванні для кожного символа відводиться не один, а два байта, тобто шістнадцять біт. Таким чином, доступно 65536 (=216) різних кодів. Цього вистарчить на латинський алфавіт, кирилицю, іврит, африканські і азіатські мови, різні спеціальні символи: математичні, економічні, технічні і багато іншого. Головний недолік системи Unicode полягає в тому, що всі тексти в цьому кодуванні стають в два рази довшими в пам’яті комп’ютера. В даний час стандарти ASCII і Unicode мирно співіснують.

Символьна константа може мати префікс L (наприклад, L'a'), який означає спеціальний розширений символьний тип (wchar_t), що застосовується для зберігання символів національних алфавітів, якщо вони не можуть бути представлені звичайним однобайтовим типом char, наприклад, Unicode. Розмір цього типу залежить від реалізації; як правило, він відповідає типу short і займає 2 байта пам'яті.

В стандарті С99 тип wchar_t визначений в декількох заголовних файлах: <stddef.h> <stdlіb.h> <wchar.h> <wctype.h>. В мові С++ реалізується підтримка введення - виведення для розширених символів за допомогою заголовного файлу <іostream.h>.