Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Кодирование беззнаковых и знаковых целых чисел. Кодирование действительных чисел. Кодирование символов и строк.Стр 1 из 3Следующая ⇒
• Беззнаковые целые числа: • Переводятся в бинарные, записываются последовательно в младшие разряды, старшие заполняются нулями. • Положительные знаковые целые числа: • Самый старший бит не заполняется, в остальном как беззнаковые целые. • Отрицательные знаковые целые числа: • Бинарный код модуля инвертируется, добавляется бинарная единица, код записывается как беззнаковые целые. • Действительные числа: • В старшие биты записывается мантисса, в младшие - порядок. • Чем больше порядок, тем меньше точность. • Символы: • Однобайтовые: ASCII; • Двухбайтовые: Unicode; • Многобайтовые: другие варианты. • Беззнаковые целые представляют только неотрицательные числа, при этом все разряды кода используются для представления значения числа и максимальное число соответствует единичным значениям кода во всех разрядах: 111…111. m-байтовая переменная целого типа без знака, очевидно, принимает значения от 0 до +28m− 1. • Однако для большинства современных процессоров обычным представлением чисел со знаком является дополнительный код. Максимальное положительное число представляется двоичным кодом 0111…111, максимальное по модулю отрицательное кодом 1000…000, а код 111…111 соответствует − 1. Такое представление чисел соответствует наиболее простой реализации арифметических логических устройств процессора на логических вентилях и позволяет использовать один и тот же алгоритм сложения и вычитания как для беззнаковых чисел, так и для чисел со знаком (отличие — только в условиях, при которых считается, что наступилоарифметическое переполнение). • Для кодирования действительных чисел используют 80-разрядное кодирование. При этом число предварительно преобразуется в нормализованную форму: 3, 1415926 = 0, 31415926 · 101 300 000 = 0, 3 · 106 123 456 789 = 0, 123456789 · 109. Первая часть числа называется мантиссой, а вторая – характеристикой (порядком). Большую часть из 80 бит отводят для хранения мантиссы (вместе со знаком) и некоторое фиксированное количество разрядов отводят для хранения характеристики (тоже со знаком). • Кодировка символов (часто называемая также кодовой страницей) – это набор числовых значений, которые ставятся в соответствие группе алфавитно-цифровых символов, знаков пунктуации и специальных символов. • В Unicode используются 16-битовые (2-байтовые) коды, что позволяет представить 65536 символов. • Применение стандарта Unicode позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы, при этом становится ненужным переключение кодовых страниц. • Для представления символьных данных в кодировке Unicode используется символьный тип wchar_t.
2. Понятие о типах данных в C и C++. Базовые типы данных. Переменные в C и C++. Описание (объявление) переменных.
Тип данных - это показатель, позволяющий правильно интерпретировать выделенный объем памяти.
Основными типами данных являются:
назв. байт диапазон описание
bool 1 0 / 255 целочисл., 0 = false, 1-255 = true char 1 0 / 255 целочисл., число указывает на символ
short 2 +-32767 целочисл. int 4 -2 млн целочисл. long 4 +-2 млн целочисл.
float 4 3.4*10^+-38 с пл. точкой, точность до 7 знаков double 8 1.7*10^+-308 с пл. точкой, точность до 15 знаков long double 8 1.7*10^+-308 с пл. точкой, точность до 15 знаков
Существуют дополнительные служебные слова signed и unsigned, указывающие на присутствие или отсутствие отрицательных чисел (знака) соответственно. Если отрицательных чисел нет, то диапазон отрицательных суммируется с диапазоном положительных.
Переменные - это выделенные с указанием типа данных участки памяти.
Объявление переменных происходит путем указания типа данных, а затем - названия переменной. Объявленной переменной можно также в той же строке присвоить значение, поставив знак равенства и указав это значение. Имя переменной обязано начинаться с буквы.
3. Выражения в языке в C и C++. Основные операции. Понятие оператора в C и C++. Выражение и оператор присваивания.
Выражение в C/C++ - описания последовательности действий, приводящей к формированию значения определенного типа. Операндами служат переменные одного и того же типа (или приведенные к одному и тому же типу). Для произведения действий с операндами ставятся символы-операторы. Операторы бывают унарными (действующими с одной переменной) и бинарными (действующими с двумя переменными).
Простейшие операции:
a=b присваивание a+b сложение a-b вычитание +a унарный плюс -a унарный минус a*b умножение a/b деление a%b взятие остатка ++a префиксный инкремент a++ суффиксный инкремент --a префиксный декремент a-- суффиксный декремент a==b равенство a! =b неравенство a> b больше a< b меньше a> =b больше или равно a< =b меньше или равно ! a логическое НЕТ a& & b логическое И a||b логическое ИЛИ ~a побитовая инверсия a& b побитовое И a|b побитовое ИЛИ a^b исключающее ИЛИ a< < b побитовый сдвиг влево a> > b побитовый сдвиг справо a+=b присваивание с суммированием (или любым другим действием) a[b] обращение к элементу массива *a непрямое обращение & a ссылка a-> b обращение к члену структуры a.b обращение к члену структуры
Выражения с оператором присваивания «=» вида a=b+c позволяют присвоить правую часть выражения левой. Слева от оператора присваивания может стоять только одиночная переменная для присваивания в неё результата.
4. Массивы и указатели в C и C++. Имя массива, как идентификатор указателя. Присваивание для указателей. Оператор выделения новой памяти в C++. Понятие об утечки памяти, оператор удаления.
Указатели - это переменные, содержащие адрес некоторой области памяти. Указатели определяют, как следует интерпретировать содержимое этой области.
Получение адреса: & a (получение адреса значения) Разыменование: *a (получение значения по адресу)
Присваивание: b=*a; c=& b; и наоборот.
Новый участок памяти можно выделить при помощи оператора new, например: int a; a = new int(5);
При выделении памяти этот оператор генерирует конструктор класса с указанными элементами («5» в примере).
Любую динамически выделенную память (т.е. при помощи new) необходимо освобождать оператором delete для предотвращения утечки: delete a;
Утечка памяти - уменьшение объема памяти из-за неосвобожденных (ненужных) участков памяти или ошибок в программе.
Массив - это область памяти, в которой последовательно хранится несколько однотипных значений. Массив инициализируется либо сразу с известным количеством значений: int a[10]; //статический массив либо с подстановкой переменной по необходимости: num=10; int *a=new int[num]; //динамический массив
Сама переменная без квадратных скобок (операторов) является указателем на начало (первый элемент) массива.
Данные в массив заносятся либо на этапе инициализации массива, например: int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; либо по необходимости отдельно в каждую ячейку: int a[10]; a[0]=1; ...
Если массив сгенерирован динамически, после работы с ним необходимо освободить память: delete[] a;
5. Символьные строки в C и C++.
Для работы с символьными строками предусмотрен класс string, который в сущности представляет собой массив char[].
Стандартными функциями ввода-вывода являются scanf(" ", < переменные>) и printf(" ", переменные), позволяющие считывать форматированный текст. При наличии класса iostream также для ввода-вывода можно использовать операторы cin и cout.
Для работы с переменными типа string применяются следующие функции: • strlen длина строки • strcat(c1, c2) конкатенация • atoi(c) перевод в целое число • atof(c) перевод в число с пл. точкой
6. Оператор условного выполнения в C и C++.
if (< условие>) {<...> }; else {<...> }; В условии применяются операторы сравнения. 7. Метки и переходы в C и C++. Возможность организации цикла с помощью меток и переходов. Цикл в C и C++.
Метки: a:
Переход к меткам: goto a;
Метки позволяют «перескакивать» в более раннюю или позднюю точку выполнения программы. Без условия обычно не используются, так как могут зациклить программу.
Цикл - это повторяющееся выполнение ряда инструкций. Простейшая реализация цикла с метками:
int b=5; bool c=false; a: if (b> 3) {b--; c=true}; else c=false; if (c==true) goto a;
Более удобные реализации циклов в C++: while (< условие>) {<..> }; do {<...> } while (< условие>); for (< начальное условие>; < условие>; < шаг>) {<...> };
8. Потоки данных в C и C++. Файловые потоки, входной и выходной потоки программы. Функции открытия и закрытия файловых потоков. Функции ввода данных из потоков в C и C++. Преобразование данных при вводе.
Поток - это последовательность байтов. Поток может представлять содержимое файлов. Потоки для работы с файлами создаются как объекты следующих классов:
ofstream - для вывода (записи) данных в файл; ifstream - для ввода (чтения) данных из файла; fstream - для чтения и для записи данных (двунаправленный обмен).
Создание потока: ofstream F;
В общем случае оператор открытия потока будет иметь вид: F.open(«file», mode);
Закрытие потока: F.close();
f.open(" C: \\a.txt", ios:: out); cout< < " a="; cin> > a; f< < a< < " \t"; // Запись данных в поток (Может это??? Другое я даже не знаю что может быть.) f.close();
9. Функции вывода данных в C и C++. Преобразование данных при выводе. // Не уверен во всем Examples: cout < < ”text”; printf(“text%”, переменная);
Некоторые типы форматов(%тип):, c - Символ s - Строка символов d, i - Целое десятичное со знаком o - Целое восьмеричное u - Целое десятичное без знака x, X - Целое шестнадцатеричное f - Дробное число в фиксированном формате e, E - Дробное число в научном формате g, G - Дробное число в научном или фиксированном формате p - Указатель (в шестнадцатеричном виде)
10. Явные и неявные преобразования типов в C и C++.
Неявные преобразования: • Любой тип -> тип bool: • всё ненулевое = 1; 0 = 0; • Любой целый -> любой целый: • при нехватке памяти старшие байты не добавляются; • Любой целый -> любой действ.: • дв. код меняется, число не меняется; • Любой действ. -> любой целый: • округление до ближайшего целого; • Действ. с большей точн. -> действ. с меньшей точн.: • лишние знаки после запятой отбрасываются.
Явные преобразования:
Для явного преобразования типов достаточно указать необходимый тип в скобках перед переменной, у которой нужно изменить тип. Простейший пример: int a=25; (float) a;
11. Понятие функции в C и C++. Описание функций и обращение к ним. Обмен данными с функциями по значению и по ссылке. Прототипы функций. Заголовочный и исходный модули для описания функций. Область видимости переменных.
Функция (подпрограмма) - выделенный набор инструкций, выполнение которого производится по вызову этой функции по имени. Функции, не возвращающие никаких значений, объявляются с типом данных void. Функции, от которых необходим возврат какого-то значения, объявляются с тем типом данных, который нужно вернуть. Функции с любым типом данных, кроме void, используются в качестве операндов в выражениях; функции с типом данных void используются конкретно как подпрограммы.
Простейшее создание и вызов функции:
void Function1(){printf(“это функция”); } //создание безтиповой функции int Fuction2(int a){a++; return a; } //создание типовой функции
Function1(); //вызов безтиповой функции int b=2; b=Function2(b); //иниц. переменной и присваивание типовой ф.
Возвращаемое значение в типовой функции указывается после оператора return. После этого оператора выполнение функции прекращается.
Нельзя вернуть ссылку на участок памяти, выделенный в функции, поскольку этот участок освобождается сразу после прекращения выполнения функции.
Существует два способа передачи параметров в функцию: по значению и по адресу.
При передаче по значению на месте формальных параметров записываются имена фактических параметров. При вычислении функции в стек заносятся копии значений фактических параметров, и операторы функции работают с этими копиями. Доступа к исходным значениям фактических параметров у функции нет, а, следовательно, нет и возможности их изменить.
При передаче по адресу в стек заносятся копии адресов параметров через указатель, ссылку или операцию взятия адреса, а функция осуществляет доступ к ячейкам памяти по этим адресам и может изменить исходные значения параметров.
void f(int i, int* j, int& k); int main(){ … int i = 1, j = 2, k = 3; cout < < " i j k\n"; cout < < i< < ’ ‘< < j< < ’ ‘< < k< < ’\n’; f(i, & j, k); cout < < i< < ’ ‘< < j< < ’ ‘< < k< < ’\n’; … } void f(int i, int* j, int& k){i++; (*j)++; k++; }
Прототип функции — это описание только типа функции, её имени и входных параметров без указания инструкций, например: void Function(int a);
Прототипы нужны, если полное описание функций находится под основным кодом программы, поскольку компилятор иначе не увидит эти функции и не сможет их выполнить в основном коде.
• Заголовочный модуль (header) — файл, содержащий прототипы используемых функций и классов. • Исходный модуль (source) — файл, содержащий наборы инструкций в рамках функций и классов.
Оба модуля добавляются к коду программы при помощи оператора include: include “something.h” include “otherstuff.cpp”
Области видимости переменных:
1. Локальные переменные — объявляются внутри функции и недоступны снаружи её; 2. Глобальные переменные — объявляются вне всего и доступны везде.
12. Структуры в C и C++. Описание типов структур и конкретных структур. Обращение к членам структур.
Структура — совокупность переменных разного типа, доступ к которым дается по общему имени структуры и не имеет переменных.
Задание прототипа: struct < имя типа структуры> {< описание членов структуры> }
Объявление структуры: < имя типа структуры> < имя структуры (перем.)>
Вызов структуры: < имя структуры>.< член структуры>
Вызов структуры с указателем: < имя указателя на структуру> -> < член структуры>
Структуры других типов могут быть членами других структур. Членами структур могут быть функции.
13. Понятие класса и объекта. Уровни инкапсуляции членов класса. Перегрузка функций и операций в классах в C++. Конструкторы и деструкторы класса.
Объект — совокупность переменных и функций, часть из которых могут быть доступны из внешней программы по внешнему имени объекта и имени переменной/функции. Функции объектов == методы.
Объект представляет какой-либо класс. Классы являются типами данных для объектов.
В описании классов содержится описание членов, причем описания членов возможны на разных уровнях инкапсуляции.
Уровни инкапсуляции определяют возможности доступа к переменным из внешней программы и при наследовании.
• Public — доступ открыт всем, кто видит определение данного класса. • Private — доступ открыт самому классу (т.е. функциям-членам данного класса) и друзьям (friend) данного класса, как функциям, так и классам. • Protected — доступ открыт классам, производным от данного. По умолчанию всегда private. Синтаксис описания классов: class < имя> {описание членов и инструкций} Синтаксис объявления объектов: < имя класса> < имя объекта> Обращение к объектам: < имя объекта>.< член> < указатель> -> < член> Функции, в том числе и конструкторы, можно перегружать, т.е. описывать разные функции с одинаковым именем. Они должны отличаться типами или количеством входных параметров. Описание прототипа класса (вне самого класса, например, в заголовочном модуле): < тип функции> < имя класса>:: < имя функции> (< описание входных параметров>) {< тело функции> }
Конструкторы — бестиповые функции, имя которых совпадает с именем класса. Могут быть перегружены. Используются для инициализации объектов этого класса.
Инициализация с конструктором: < имя класса> *< имя указателя>; < имя указателя> =new < имя класса> (< входные параметры>);
Деструктор — единственный в классе; срабатывает автоматически при удалении объекта, невозможно вызвать вручную.
|