1. Тип данных — фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям, и, возможно, способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.
2. В языке не очень много базовых типов. Это число (целое или с плавающей запятой), атом, двоичные данные, битовые строки, функции-объекты (аналогично JavaScript-у), идентификатор порта, идентификатор процесса (Erlang процесса, а не системного), кортеж, список. Существует ряд псевдотипов: запись, булев, строки. Любой тип данных (не обязательно элементарный) называется терм.
3,4. Любая информация в памяти компьютера представляется с помощью нулей и единиц, то есть с помощью двоичной системы счисления. Первоначально компьютеры могли работать только с числами. Теперь это числа, тексты, графические объекты, видеоинформация. Работа с данными сводится любого типа к обработке двоичных чисел – чисел, записываемых с помощью двух цифр – 0и 1. В компьютере различаются два типа числовых величин: целые числа и вещественные числа. Различаются способы представления в памяти компьютера. Они называются:
форма с фиксированной точкой (применяется к целым числам)
форма с плавающей точкой (применяется к вещественным числам).
5. Алгоритм и его свойства
Алгоритмом называется точная инструкция исполнителю в понятной для него форме, определяющая процесс достижения поставленной цели на основе имеющихся исходных данных за конечное число шагов.
Основными свойствами алгоритмов являются:
1. Универсальность (массовость) - применимость алгоритма к различным наборам исходных данных.
2. Дискретность - процесс решения задачи по алгоритму разбит на отдельные действия.
3. Однозначность - правила и порядок выполнения действий алгоритма имеют единственное толкование.
4. Конечность - каждое из действий и весь алгоритм в целом обязательно завершаются.
5. Результативность - по завершении выполнения алгоритма обязательно получается конечный результат.
6. Выполнимость - результата алгоритма достигается за конечное число шагов.
6. Формы представления алгоритмов.
На практике наиболее распространены следующие формы представления алгоритмов:
словесная (записи на естественном языке);
графическая (изображения из графических символов);
псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.);
программная (тексты на языках программирования).
Словесный способ записи алгоритмов представляет собой описание последовательных этапов обработки данных. Алгоритм задается в произвольном изложении на естественном языке. Например. Записать алгоритм нахождения наибольшего общего делителя (НОД) двух натуральных чисел.
7. Aрифметические операции в C++:
"+" - сложение
"-" - вычитание
"*" - умножение
"/" - деление
"%" - остаток от деления
8. В С++ существует три логические операции: 1) Логическая операция И "&&"; 2) Логическая операция ИЛИ "||"; 3) Логическая операция НЕ "!" или логическое отрицание.
9. Поразрядные (побитовые) операции в языке С. Поразрядные (побитовые) операции можно производить с любыми целочисленными переменными и константами. Эти действия не применимы к переменным типа float, double или long double. Результаты побитовых операций будут иметь целочисленное значение. К поразрядным операциям относятся следующие операции:
& ( или and ),
| ( или OR ),
^ ( или XOR ),
- ( или NOT ),
сдвиг влево,
сдвиг вправо.
В случае побитной операции сравниваются значения каждой пары битов. Тем самым обеспечивается доступ к битам. Эти операции находят применение в драйверах устройств, программах, связанных с принтером, модемом и другими устройствами. Когда выполняются логические операции над выражениями, то в итоге Вы получаете либо 0, либо 1. Однако в случае поразрядных операций так же выполняются логические действия, но они не имеют результатом обязательно только либо 0, либо 1. Рассмотрим примеры. 1). Пусть ch=ch & 127; Тогда, если ch='A', т.е. 11000001 и число 127 есть 01111111 В итоге будет 01000001 Если соответствующие разряды одинаковы, то в результате имеем 1, иначе имеем 0. Так работает операция "and" или логическое умножение. 2). Пусть ch=ch | 128; Тогда, если ch='A', т.е. 11000001 и число 128 есть 10000000 В итоге будет 11000001 Поразрядные операции удобны для организации хранения в сжатом виде информации о состоянии некоторых переключателей: включен/выключен (on/off). В одном байте можно хранить 8 таких флагов. 3). Пусть ch является хранилищем таких флагов. Проверить, находится ли флаг в третьем бите в состоянии On, можно следующим образом: if (ch & 4) printf("Третий бит содержит 1, состояние On"); Эта проверка основывается на двоичном представлении числа 4: 00000 100 Операции сдвига (влево или вправо) применимы только к целочисленным переменным. При этих операциях сдвигаются все биты левого операнда на число позиций, опеределенных выражением вправа от знака операции сдвига. Операции сдвига обозначаются двойными знаками: << - сдвиг влево и >> - сдвиг вправо. 4). Пусть x = 9, что в двоичном представлении имеет вид: 0000 1001 Тогда x=9<<3 есть код: 01001000; x=9>>3 есть код: 00000001; x=9>>5 есть код: 00000000; Легко заметить, что операция сдвига ведет к потере старших или младщих разрядов. Применение сдвигов << и >> к одной и той же величине может изменить значение этой переменной из-за потери разрядов. 5). Пусть беззнаковая величина unsigned char x=255; Выполним сдвиг влево на 3 разряда и затем так же сдвиг вправо на 3 разряда. Получим: x=255<<3 в двоичном коде будет иметь вид: 11111000; x=11111000>>3 в двоичном коде будет иметь вид: 00011111. 3. Операции [] и { } в языке С. В языке С круглые и квадратные скобки так же рассматриваются как операции. Причем они имеют самый наивысший приоритет. Поразрядные операции порождают еще несколько сложных операций присваивания: |=, &=, ^=, <<=, >>=.
10. Операция присваивания в языке программирования C++ обозначается знаком '='. Как и другие операторы в C++, она может быть перегружена.
Операция присваивания копированием - особый вид операции присваивания, используемый для присваивания объектов одного класса друг другу. Является одним изособых членов-функций и генерируется автоматически компилятором в случае, если нет явного объявления программистом. Код, сгенерированный компилятором, выполняетповерхностное копирование.
Операция присваивания копированием отличается от конструктора копирования тем, что должен очищать члены-данные цели присваивания (и правильно обрабатывать самоприсваивание), тогда как конструктор копирования присваивает значения неинициализированным членам-данным.