Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

10: // результатом умножения значений переменных Width на Length

11: unsigned short int Area = (Width * Length);

12:

13: cout << "Width:" << Width << "\n";

14: cout << "Length: " << Length << endl;

15: cout << "Area: " << Area << endl;

16: return 0;

17: }

Результат:

Width: 5

Length: 10

Area: 50

В строке 2 содержится директива препроцессора include, включающаябиблиотеку iostream, которая обеспечивает

работоспособность объекта вывода cout. Собственно, программа начинает свою работу в строке 4.

В строке 6 переменная Width определяется для хранения значения типа unsigned short int, и тут же выполняется инициализация этой переменной числом 5. В этой же строке определяется еще одна переменная Length такого же типа, но без инициализации. В строке 7 переменной Length присваивается значение 10.

В строке 11 определяется переменная Area типа unsigned short int, которая тут же инициализируется значением, полученным в результате умножения значений переменных Width и Length. В строках 13—15 значения всех переменных программы выводятся на экран. Обратите внимание на то, что для разрывов строк используется специальный оператор endl.

Ключевое слово typedef

Порой утомительно и скучно многократно повторять запись таких ключевых слов, как unsigned short int. (Кроме того, в этих трех словах немудрено наделать еще и кучу ошибок.) В языке C++ предусмотрена возможность создания псевдонима для этой фразы путем использования ключевого слова typedef, которое означает определение типа.

При создании псевдонима важно отличать его от создания нового типа (об этом пойдет речь на занятии 6). Чтобы создать псевдоним типа данных, сначала записывается ключевое слово typedef, за которым следует существующий тип, а за ним новое имя с символом точки с запятой. Например, при выполнении строки

typedef unsigned short int USHORT;

создается новое имя USHORT, которое можно использовать везде, где нужно определить переменную типа unsigned short int. Листинг 3.3 переделан из листинга 3.2 с использованием псевдонима USHORT вместо слов unsigned short int.

Листинг 3.3. Пример определения типа с помощью typedef 

1: // * * * * * * * * * * * * * * * * *

2: // Пример определения типа с помощью typedef

3: #include <iostream.h>

4:

5: typedef unsigned short int USHORT; //определение псевдонима

6:

7: int main

8: {

9: USHORT Width = 5;

10: USHORT Length;

11: Length = 10;

12: USHORT Area = Width * Length;

13: cout << "Width:" << Width << "\n";

14: cout << "Length: " << Length << endl;

15: cout << "Area: " << Area << endl;

16: return 0;

17: }

Результат:

Width: 5

Length: 10

Area: 50

В строке 5 идентификатор USHORT с помощью ключевого слова typedef определен как псевдоним типа unsigned short int. В остальном эта программа аналогична предыдущей, представленной в листинге 3.2, да и результаты работы обеих программ совпадают.

В каких случаях следует использовать типы short и long

Начинающим

программистам часто бывает трудно принять решение о том, когда объявлять переменную с использованием типа long, а когда — с использованием типа short. Правило довольно простое: если существует хоть малейший шанс, что ваше значение будет слишком большим для предполагаемого типа, используйте тип с большим размером.

Приведенные в табл. 3.1 переменные типа unsigned short int, как правило, имеют размер, равный двум байтам, и могут хранить значение, не превышающее 65 535. Знаковые короткие целые делят свой диапазон между положительными и отрицательными числами, поэтому их максимальное значение вдвое меньше, чем у беззнакового короткого целого.

Хотя переменные типа unsigned long int могут хранить очень большое число (4 294 967 295), оно все-таки конечно. Если вам нужно работать с еще большими числами, придется перейти к использованию типов float или double, но при этом вы несколько проиграете в точности. Переменные типа float и double могут хранить чрезвычайно большие числа, но на большинстве компьютеров значимыми остаются только первые 7 или 19 цифр, т.е. после указанного количества цифр число округляется.

Переменные с меньшим размером используют меньший объем памяти. В наши дни память становится все дешевле, а жизнь не так уж длинна, чтобы тратить ее на экономию памяти. Поэтому отдайте предпочтение типу int, который на большинстве компьютеров имеет размер в четыре байта.

Переполнение беззнаковых целых

Что случится, если при использовании беззнаковых длинных целых превысить их предельный максимум?

Когда беззнаковое целое достигает своего максимального значения, при очередном инкременте оно сбрасывается в нуль и отсчет начинается сначала, как в автомобильном одометре. В листинге 3.4 показано, что произойдет при попытке поместить слишком большое число в переменную типа short.

Листинг 3.4. Пример переполнения беззнаковой целой переменной.

1: #include <iostream.h>

2: int main

3: {

4: unsigned short int smallNumber;

5: smallNumber = 65535;

6: cout << "small number:" << smallNumber << endl;

7: smallNumber++;

8: cout << "small number:" << smallNumber << endl;

9: smallNumber++;

10: cout << "small number:" << smallNumber << endl;

11: return 0;

12: }

Результат:

small number:65535

small number:0

small numbar:1

АНАЛИЗ: В строке 4 объявляется переменная smallNumber типа unsigned short int, которая на моем компьютере является двухбайтовой, способной хранить значение между 0 и 65 535. В строке 5 переменной smallNumber присваивается максимальное значение, которое в строке 6 выводится на экран.

В строке 7 переменная smallNumber увеличивается на 1. Приращение осуществляется с помощью оператора инкремента, имеющего вид двух символов плюс (++). Следовательно, значение переменной smallNumber должно стать 65 536. Однако переменная типа unsigned short int не может хранить число, большее 65 535, поэтому ее значение сбрасывается в 0, который и выводится в строке 8.

Поделиться:
Популярные книги

Плеяда

Суконкин Алексей
Проза:
военная проза
русская классическая проза
5.00
рейтинг книги
Плеяда

Вперед в прошлое 6

Ратманов Денис
6. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 6

Тверской баскак. Том Четвертый

Емельянов Дмитрий Анатолиевич
4. Тверской Баскак
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Тверской баскак. Том Четвертый

Страж Кодекса

Романов Илья Николаевич
1. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса

На границе империй. Том 5

INDIGO
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
На границе империй. Том 5

Искатель 3

Шиленко Сергей
3. Валинор
Фантастика:
попаданцы
рпг
фэнтези
5.00
рейтинг книги
Искатель 3

Совершенный: пробуждение

Vector
1. Совершенный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Совершенный: пробуждение

Лейб-хирург

Дроздов Анатолий Федорович
2. Зауряд-врач
Фантастика:
альтернативная история
7.34
рейтинг книги
Лейб-хирург

Виктор Глухов агент Ада. Компиляция. Книги 1-15

Сухинин Владимир Александрович
Виктор Глухов агент Ада
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Виктор Глухов агент Ада. Компиляция. Книги 1-15

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Лидер с планеты Земля

Тимофеев Владимир
2. Потерявшийся
Фантастика:
боевая фантастика
космическая фантастика
6.00
рейтинг книги
Лидер с планеты Земля

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Тигр под елку

Зайцева Мария
4. Наша
Любовные романы:
короткие любовные романы
5.00
рейтинг книги
Тигр под елку

Командор космического флота

Борчанинов Геннадий
3. Звезды на погонах
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Командор космического флота