Представление отрицательных чисел
Целые отрицательные числа хранятся в компьютере в двоичном «дополнительном» коде: положительное двоичное число необходимо побитово инвертировать и прибавить единицу.
Этот код основан на простом соображении, что x + (-x) = 0 при сложении двоичных чисел столбиком. При этом единица, которая переходит из старшего 7‑го бита в несуществующий 8‑ой бит, пропадает. Например, для однобайтного числа x = 5 имеем
x = 5 = 0000 0101
+
– x = -5 = **** ****
____________________
0 = 0 = 0000 0000
Теперь конструируем число -5 = 1111 1011.
Целочисленные типы данных в языке Си
Таблица 3. Целочисленные типы данных
Название типа | Размер в байтах | Диапазон |
unsigned char | 1 | 0 … 255, 0. 28 - 1 |
char, signed char | 1 | -128 … 127, -27… 27-1 |
unsigned int | 2 | 0. 65535, 0. 216 - 1, 0 … 64 K – 1 |
int, signed int | 2 | -32758 … 32757, -215 … 215 - 1, -32 K… 32 K – 1 |
unsigned long | 4 | 0… 232 - 1, 0… 4 M – 1 |
long | 4 | -231… 231 - 1, 0… 4 M – 1 |
По умолчанию целые десятичные константы имеют тип int. Поэтому все целые числа должны содержаться в диапазоне -32758… 32757. Например, запись x = 100000 будет ошибочна независимо от типа переменной x. Для обозначения целой константы типа long используется суффикс l. Тогда инициализация long x = 100000l будет корректна.
Компилятор не проверяет выход результата целочисленного выражения за диапазон типа. Запись long x = 20000 + 20000 будет ошибочна, так как 40000 не содержится в диапазоне типа int. Это будет «хорошо скрытая» ошибка. Реально x будет содержать значение
40000 – 64 К. Запись long x = 20000l + 20000 будет уже корректна, так как результат будет иметь уже тип long.
|
|
Построим область корректного сложения для типа char.
char x, y, z;
x = y = 100;
z = x + y;
Нарисуем в системе координат (x, y) множество, для которого z будет содержать корректный ответ. Имеем систему
решением которой является шестиугольник.
Рис. 1. Диапазон корректного сложения
Вещественные типы данных в языке Си
Вещественные типы всегда имеют знак.
Определение 3. Нормализованной формой ненулевого числа x называется запись x = M×10p, где M – мантисса, 0,1 £ ½ M ½ < 1, p – порядок числа х.
Нормализованная форма числа единственна.
Таблица 4. Вещественные типы данных
Название типа | Размер в байтах | Размер мантиссы в десятичных знаках | Размер порядка в битах | Диапазон |
float | 4 | 7–8 | 8 | 3,4×10-38 … 3,4×1038 |
double | 8 | 15–16 | 11 | 1,7×10-308… 1,7×10308 |
long double | 10 | 19–20 | 15 | 3,4×10-4932… 1,1×104932 |
Определение 4. Машинным нулем для данного вещественного типа называется минимальное положительное число того же типа
|
|
m0 = min {x: x > 0}.
Определение 5. Машинным эпсилон для данного вещественного типа называется минимальное число того же типа, для которого 1 + x > 1
me = min {x: 1 + x > 1}.
Определение 6. Машинной бесконечностью для данного вещественного типа называется максимальное число того же типа
m¥ = max{x}.
По диапазону типа можно определить m0, m¥. Машинный эпсилон определяется размером мантиссы. Так, например, для типа float имеем
m0 = 3,4×10-38, m¥ = 3,4×1038, me » 10-8.
Определение 7. «Правым соседом» числа x данного вещественного типа назовем минимальное число y того же типа, для которого x < y
«Правый сосед» х = min {y: x < y}.
«Правый сосед» числа х больше самого х на величину равную
me × 10порядок числа х.
Приближенно можно считать, что «правый сосед» числа х » х + me × x.
Например, для типа float «правый сосед» числа 1010 » 1010 + 10-8 × 1010 = 1010 + 100.
Таким образом, вещественные числа данного типа расположены на числовой прямой неравномерно, чем больше числа, тем больше расстояние между соседними числами. Этот факт следует учитывать при организации циклов: шаг цикла должен быть больше, чем расстояние между соседними числами.
Параметры типа в таблице 4 связаны между собой.
Задача. Вещественный тип doom занимает 15 байт, под порядок отведено 30 бит. Определить остальные параметры этого типа.
|
|
Решение. Порядок занимает 30 бит, поэтому минимальное двоичное значение порядка равно -229. Для перевода этого числа к десятичному основанию решим показательное уравнение -229 = -10х. Логарифмируя по основанию 10, получаем х = 29 × lg2 » 29 × 0,3010 = 8,729. Таким образом, m0 равен » 0,5 × 10-161290865,49 » 1,54 × 10-161290865.
Мантисса в двоичной системе счисления занимает 90 бит, из которых один бит определяет знак мантиссы. Так как первые знаки двоичной мантиссы равны 0,1 и всегда одинаковы, то под них память не отводится. Поэтому остальные 89 бит мантиссы занимают разряды с номерами от -2 до -90. «Правый сосед» единицы равен 0,100…0012 × 21, где последняя единица стоит в -90‑ом разряде. Тогда
me = 2-89 = 10-89 × lg(2) = 10-26,79 = 6,17 × 10-26
Кодирование символов
Для кодирования символов с помощью одного байта используется ASCII‑таблица (American Standard Code for Information Interchage)
В ASCII‑таблице содержатся различные символы и соответствующие им коды. Например, символу ‘0’ соответствует код 0x30 = 48. Символы и строки хранятся в памяти в виде соответствующих кодов из ASCII‑таблицы. Например, строка «123» в памяти будет храниться в виде последовательности байт 0х31 0х32 0х33 0х00. Иногда строки, у которых 0 является признаком конца, называют asciiz‑строками.
|
|
Таблица 5. ASCII – таблица символов
Основная таблица ASCII | Расширенная таблица ASCII |
Символу ‘b’ соответствует «ASCII‑код» 0x62. В десятичной системе это будет 98, а в двоичной – 01100010. Код символа ‘b’ вы можете посмотреть из ASCII‑таблицы. Таблицы символов для разных шрифтов можно найти с помощью программы Таблица Символов: Пуск – Стандартные – Системные утилиты – Таблица Символов).
В русской кодировочной странице 866 буква Ё имеет код 0xF0, а буква ё – код 0хF1.
В языке Си символьные константы обозначаются ‘\xxx’, где ххх – код этого символа, записанный в восьмеричной СС. Иначе говоря,
‘\xxx’ – это код символа, у которого код равен ххх.
Примеры. 1. Количество букв в английском алфавите равно
‘Z’ – ‘A’ + 1.
2. Количество букв в русском алфавите равно ‘Я’ – ‘А’ + 2.
Схемы алгоритмов
Для облегчения вычерчивания и нахождения на схеме символов рекомендуется поле листа разбивать на зоны. Размеры зон устанавливают с учетом минимальных размеров символов, изображенных на данном листе. Допускается один символ размещать в двух и более зонах, если размер символа превышает размер зоны. Координаты зоны проставляют: по горизонтали – арабскими цифрами слева направо в верхней части листа; по вертикали – прописными буквами латинского алфавита сверху вниз в левой части листа. Координаты зон в виде сочетания букв и цифр присваивают символам, вписанным в поля этих зон, например: A1, A2, A3, B1, B2, B3 и т.д. Если поле листа не разбито на зоны, символам присваивают порядковые номера.
Линии потока должны быть параллельны линиям внешней рамки схемы. Направления линий потока сверху вниз и слева направо принимают за основные и, если линии потока не имеют изломов, стрелками можно не обозначать. В остальных случаях направление линии потока обозначать стрелкой обязательно.
Сокращения слов и аббревиатуры, кроме стандартных и общепринятых, должны быть расшифрованы в нижней части поля схемы или в документе, к которому эта схема относится. Записи внутри символа должны быть представлены так, чтобы их можно было читать слева направо и сверху вниз, независимо от направления потока. (вид а должен быть прочитан как вид б).
Рис. 2. Эквивалентные фрагменты схемы алгоритма
Таблица 6. Соединитель
Обозначение | Комментарии | Использование |
E5, B1, A, 5 – идентификаторы соединителей в виде: буквы и цифры (координаты зоны листа) | При большой насыщенности схемы символами отдельные линии потока между удаленными друг от друга символами допускается обрывать. При этом в конце (начале) обрыва должен быть помещен символ «Соединитель» | |
буквы | ||
цифры |
Таблица 7. Межстраничный соединитель
Обозначение | Комментарии | Использование |
Первая строка внутри межстраничного соединителя определяет номер листа схемы, вторая – координату символа | а) связываемые линией потока символы находятся на разных листах | |
A3 – определяет зону на данном листе, где расположен символ «Комментарий» 010E3 – определяет номер листа и зону расположения, связываемую с символом E3 | б) в случае связи некоторого символа со многими другими символами, расположенными на разных листах, на входе этого символа помещают один символ «Межстраничный соединитель», внутри которого на первой строке помещают знак #, а на второй строке – координаты символа «Комментарий». Внутри символа «Комментарий» указывают номера страниц и координаты символов, связанных с поясняемым символом |
Таблица 8. Линии потока
Обозначение | Комментарии | Использование |
Применяют для указания направления линии потока: можно без стрелки, если линия направлена слева направо и сверху вниз; со стрелкой – в остальных случаях | ||
Излом линии потока под углом 90о | Обозначает изменение направлений линии потока | |
Пересечение линий потока | Применяется в случае пересечения двух несвязанных линий потока | |
Слияние линий потока. Место слияний линий потока обозначено точкой | Применяется в случае слияния линий потока, каждая из которых направлена к одному и тому же символу на схеме. Место слияния линий потока допускается обозначать точкой или цифрой 0. | |
Место слияний линий потока обозначено цифрой 0 |
Таблица 9. Возможные варианты отображения решения
Обозначение | Комментарии | Использование |
A = B, P ≥ 0 – условия решений; A, B, P – параметры | При числе исходов не более трех признак условия решения (Да, Нет, =, >, <) проставляют над каждой линией потока или справа от линии потока | |
yi – условие i‑го исхода, 011T1, 016A3, 005B5, 015T4 – адреса исходов. Структура адреса имеет вид: | При числе исходов более трех условие исхода проставляется в разрыве линии потока. Адрес исхода проставляется в продолжении условия исхода и отделяется от него пробелом | |
B5 – знак, указывающий, что условия решения даются в виде таблицы или символа «Комментарий», расположенных на данном листе в зоне B5 | в символе «Соединитель» указывают координату зоны, куда должна помещаться таблица или символ «Комментарий» |
Таблица 10
Символы в схемах алгоритмов
Название символа | Обозначение | Использование |
1. Процесс | Выполнение операции или группы операций, в результате которых изменяется значение, форма представления или расположение данных | |
2. Решение | Выбор направления выполнения алгоритма или программы в зависимости от некоторых переменных условий | |
3. Модификация | Выполнение операций, меняющих команды, или группы команд, изменяющих программу | |
4. Предопреде ленный процесс | Использование ранее созданных и отдельно описанных алгоритмов или программ | |
5. Ручной ввод | Ввод данных вручную при помощи неавтономных устройства с клавиатурой, переключателей, кнопок | |
6. Ввод-вывод | Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод) | |
7. Документ | Ввод-вывод данных, носителем которых служит бумага | |
8. Файл | Представление организованных на основе общих признаков данных, характеризующих в совокупности некоторый объект обработки данных. Символ используется в сочетании с символами конкретных носителей данных, выполняющих функции ввода-вывода. | |
9. Линия потока | Указание последовательности связей между символами | |
10. Соединитель | Указание связи между прерванными линиями потока, соединяющими символы | |
11. Пуск-останов | Начало, конец, прерывание процесса обработки данных или выполнения программы | |
12. Комментарий | Связь между элементом схемы и пояснением | |
13. Межстраничный соединитель | Указание связи между разъединенными частями схем алгоритмов и программ, расположенных на разных листах |
Размер a должен выбираться из ряда 10, 15, 20 мм. Допускается увеличивать размер a на число, кратное 5. Размер b равен 1,5 × a. При ручном выполнении схем алгоритмов и программ допускается устанавливать b равным 2 × a.
Дата добавления: 2020-01-07; просмотров: 172; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!