- •Максимов м.Н.
- •3. Скалярные типы и выражения 51
- •5. Адреса, указатели, массивы, память 96
- •6. Функции, указатели, ссылки 133
- •7 Структуры, объединения и классы 171
- •Введение
- •Модуль 1
- •1.2. Этапы подготовки исполняемой программы
- •1.3. Системы счисления
- •Представление чисел от 0 до 16 в разных системах счисления
- •2.1. Общие сведения о программах, лексемах и алфавите
- •2.2. Идентификаторы и служебные слова
- •2.3. Типы данных
- •2.4. Константы
- •Типы, выбираемые компилятором по умолчанию для целых констант
- •ZzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzТаблица 2.3 Данные вещественного типа
- •2.5. Операции
- •2.6. Разделители
- •3. Скалярные типы и выражения
- •3.1. Определение и описание переменных
- •3.2. Явное и неявное преобразование типа
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Список литературы
- •Модуль 2
- •4.1. Последовательно выполняемые операторы
- •4.2. Операторы выбора
- •If( выражение) оператор_1 else оператор_2
- •4.3. Операторы цикла
- •4.4. Операторы передачи управления
- •If (условие) break;
- •4.5. Примеры численного моделирования цепей первого порядка
- •5. Адреса, указатели, массивы, память
- •5.1. Указатели и адреса объектов
- •5.2. Адресная арифметика, типы указателей и операции над ними
- •5.3. Свойства указателя типа void*
- •5.4. Свойства объекта cout
- •5.5. Массивы и указатели
- •5.6. Многомерные массивы, массивы указателей, динамические массивы
- •Проектные задания к модулю
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •6.2. Функции с переменным количеством параметров
- •6.3. Рекурсивные функции
- •6.4. Подставляемые (инлайн-) функции
- •6.5. Функции и массивы
- •6.6. Указатели на функции
- •Void f3(float) (...) // Определение функции
- •Int* f4(char *){...} // Определение функции
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Модуль 4
- •7 Структуры, объединения и классы
- •7.1 Структура как тип и совокупность данных
- •7.3 Объединения разнотипных данных
- •7.4 Деревья
- •7.5 Битовые поля структур и объединений
- •7.6 Компонентные функции структурированных объектов
- •7.7 Расширение действия (перегрузка) стандартных операций
- •7.8 Доступ к компонентам структурированного объекта
- •7.9 Классы и шаблоны
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Список литературы
- •Приложение 1
- •Приложение 2 Стандартная библиотека функций языка Си
1.3. Системы счисления
В языке Си++ используются константы, представленные в десятичной, восьмеричной и шестнадцатеричной системах счисления. Для понимания того, как выполняются некоторые операции языка Си++, необходимо уметь переводить числа из одной системы счисления в другую. Поэтому остановимся кратко на способах представления чисел в разных системах счисления и перевода их из одной системы в другую. В табл. 1 показано представление чисел от 0 до 16 в разных системах счисления.
Таблица 1.1
Представление чисел от 0 до 16 в разных системах счисления
Системы счисления | |||
Десятичная |
Двоичная |
Восьмеричная |
Шестнадцатеричная |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
2 |
10 |
2 |
2 |
3 |
11 |
3 |
3 |
4 |
100 |
4 |
4 |
5 |
101 |
5 |
5 |
6 |
110 |
6 |
6 |
7 |
111 |
7 |
7 |
8 |
1000 |
10 |
8 |
9 |
1001 |
11 |
9 |
10 |
1010 |
12 |
A |
11 |
1011 |
13 |
B |
12 |
1100 |
14 |
C |
13 |
1101 |
15 |
D |
14 |
1110 |
16 |
E |
15 |
1111 |
17 |
F |
16 |
10000 |
20 |
10 |
Любая константа N c наперёд заданной точностью может быть представлена в позиционной системе счисления с основанием D в следующем виде (будем рассматривать только целые и положительные D):
, (1.1)
где возможные цифры (0D-1). Для шестнадцатеричной системы счисления (D = 16) возможными цифрами будут 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f.
Число k указывает местоположение запятой. Если k 0, то число N дробное, если 0<k<n, то число N смешанное, если k>n , то число N целое. Величина n определяет требуемую точность представления числа.
В обычной записи чисел знак суммы и степени основания отбрасываются и числа записываются в виде
. (1.2)
Если N – число дробное или смешанное, отделяем запятой целую часть от дробной. Например, число две тысячи четыреста двадцать пять можно записать в десятичной, двоичной, восьмеричной и шестнадцатеричной системе в виде формы (1.1) и (1.2) так:
Исторически так сложилось, что в обиходе используется десятичная система счисления, но с появлением вычислительных машин при их программировании стало удобным применять двоичную и шестнадцатеричную систему счислений. Это в первую очередь связано с тем, что элементарная ячейка компьютера бит может находиться только в двух состояниях 0 или 1. Поэтому, двоичное число, например 100101111001 (2425), сразу характеризует, сколько бит (в данном случае 12) необходимо, чтобы хранить число 2425 в памяти компьютера, и в каком состоянии (0 или 1) они должны находиться. Но двоичное число достаточно громоздко, мало того, память ЭВМ организована так, что адресуются не отдельные биты, а совокупность восьми бит называемых байтом. Эта кратность восьми предопределило выбор шестнадцатеричной системы как компактного способа записи констант при программировании.
Поясним сказанное на примере. В одном байте (8 бит) может хранится двоичное число лежащее в диапазоне от 00000000 до 11111111 (от 0 до 255) или в шестнадцатеричной форме от 00 до FF. Переход от двоичной к шестнадцатеричной системе и обратно можно выполнить очень просто не прибегая к аналитическим выражениям. Для этого необходимо мысленно разбить двоичное число на группы по четыре разряда и поставить каждой группе соответствующее шестнадцатеричное число из табл. 1.1.
Примеры:
1111 1111 = F F;
0101 1100 = 5 C;
00 1001 0111 1001 = 0 9 7 9.
Аналогично переход из шестнадцатеричной системы в двоичную можно осуществить просто подставляя вместо разрядов шестнадцатеричного числа соответствующие им по табл. 1.1 двоичные представления (1F = 0001 1111).
Переход от десятичной системы к двоичной или шестнадцатеричной более сложен. Для того чтобы его осуществить необходимо разделить десятичное число на соответствующее основание (два или шестнадцать) так, как это показано на примере числа 758.
или
В результате получаем шестнадцатеричное число 2f6 и двоичное число 1011110110. Если применить описанное выше правило перехода от двоичной системы к шестнадцатеричной, то можно увидеть, что результаты совпали.
Чтобы перейти от двоичной или шестнадцатеричной системы к десятичной необходимо воспользоваться выражением (1.1). В случае с числом 758 переход будет выглядеть следующим образом:
Одну и ту же константу в языке Си++ можно записать в шестнадцатеричном, десятичном и восьмеричном виде. Возможность записать константу в двоичном виде в языке Си++ отсутствует.
2. ЛЕКСИЧЕСКИЕ ОСНОВЫ ЯЗЫКА Си++