Смекни!
smekni.com

Системы счисления и представления типов данных (стр. 2 из 3)

Этот код основан на простом соображении, что x+ (-x) = 0 при сложении двоичных чисел столбиком. При этом единица, которая переходит из старшего 7‑го бита в несуществующий 8‑ой бит, пропадает. Например, для однобайтного числа x = 5 имеем

x = 5 = 0000 0101

+

– x = -5 = **** ****

____________________

0 = 0 = 0000 0000

Теперь конструируем число -5 = 1111 1011.

6. Целочисленные типы данных в языке Си

Таблица 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…64K–1
int, signed int 2 -32758 … 32757,
-215 … 215 - 1,
-32 K… 32 K– 1
unsignedlong 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. Тогда инициализация longx = 100000l будет корректна.

Компилятор не проверяет выход результата целочисленного выражения за диапазон типа. Запись longx = 20000 + 20000 будет ошибочна, так как 40000 не содержится в диапазоне типа int. Это будет «хорошо скрытая» ошибка. Реально x будет содержать значение
40000 – 64 К. Запись longx = 20000l + 20000 будет уже корректна, так как результат будет иметь уже тип long.

Построим область корректного сложения для типа char.

char x, y, z;

x = y = 100;

z = x + y;

Нарисуем в системе координат (x, y) множество, для которого z будет содержать корректный ответ. Имеем систему

решением которой является шестиугольник.

Рис. 1. Диапазон корректного сложения

7. Вещественные типы данных в языке Си

Вещественные типы всегда имеют знак.

Определение 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
longdouble 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

8. Кодирование символов

Для кодирования символов с помощью одного байта используется ASCII‑таблица (AmericanStandardCodeforInformationInterchage)

В 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.

В языке Си символьные константы обозначаются ‘&bsol;xxx’, где ххх – код этого символа, записанный в восьмеричной СС. Иначе говоря,
‘&bsol;xxx’ – это код символа, у которого код равен ххх.

Примеры. 1. Количество букв в английском алфавите равно
‘Z’ – ‘A’ + 1.

2. Количество букв в русском алфавите равно ‘Я’ – ‘А’ + 2.

9. Схемы алгоритмов

Для облегчения вычерчивания и нахождения на схеме символов рекомендуется поле листа разбивать на зоны. Размеры зон устанавливают с учетом минимальных размеров символов, изображенных на данном листе. Допускается один символ размещать в двух и более зонах, если размер символа превышает размер зоны. Координаты зоны проставляют: по горизонтали – арабскими цифрами слева направо в верхней части листа; по вертикали – прописными буквами латинского алфавита сверху вниз в левой части листа. Координаты зон в виде сочетания букв и цифр присваивают символам, вписанным в поля этих зон, например: A1, A2, A3, B1, B2, B3 и т.д. Если поле листа не разбито на зоны, символам присваивают порядковые номера.

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

Сокращения слов и аббревиатуры, кроме стандартных и общепринятых, должны быть расшифрованы в нижней части поля схемы или в документе, к которому эта схема относится. Записи внутри символа должны быть представлены так, чтобы их можно было читать слева направо и сверху вниз, независимо от направления потока. (вид а должен быть прочитан как вид б).

Рис. 2. Эквивалентные фрагменты схемы алгоритма


Таблица 6. Соединитель

Обозначение Комментарии Использование
E5, B1, A, 5 – идентификаторы соединителей в виде:
буквы и цифры (координаты зоны листа)
При большой насыщенности схемы символами отдельные линии потока между удаленными друг от друга символами допускается обрывать. При этом в конце (начале) обрыва должен быть помещен символ «Соединитель»
буквы
цифры

Таблица 7. Межстраничный соединитель

Обозначение Комментарии Использование
Первая строка внутри межстраничного соединителя определяет номер листа схемы, вторая – координату символа а) связываемые линией потока символы находятся на разных листах
A3 – определяет зону на данном листе, где расположен символ «Комментарий» 010E3 – определяет номер листа и зону расположения, связываемую с символом E3 б) в случае связи некоторого символа со многими другими символами, расположенными на разных листах, на входе этого символа помещают один символ «Межстраничный соединитель», внутри которого на первой строке помещают знак #, а на второй строке – координаты символа «Комментарий». Внутри символа «Комментарий» указывают номера страниц и координаты символов, связанных с поясняемым символом

Таблица 8. Линии потока