Формы представления чисел в ЭВМ. Кодирование текстовой и графической информации
Физический бит и логическая семантика данных
В аппаратных ячейках памяти и регистрах процессора физически хранятся только дискретные состояния 0 и 1.
Физический уровень
- Триггеры SRAM, конденсаторы DRAM, флеш-ячейки.
- Единица физической адресации памяти — 8-битный байт.
- Аппаратные машинные слова: 16, 32, 64 бита.
Инвариант архитектуры
- В ячейке памяти нет метаданных о типе данных.
- Байт
11111111_2 — это:
• 255 (беззнаковое целое)
• -1 (знаковое в доп. коде)
• символ «я» в кодировке CP1251.
- Тип определяется кодом исполняемой инструкции!
Целые числа без знака (Unsigned Integers)
В беззнаковом формате все разряды ячейки используются для представления абсолютного значения числа.
Формула диапазона значений n-битной сетки: [0; 2n - 1]
| Разрядность |
Байт |
Десятичный диапазон |
Шестнадцатеричный вид (HEX) |
| 8 бит (байт) |
1 байт |
0 ... 255 |
0x00 ... 0xFF |
| 16 бит (слово) |
2 байта |
0 ... 65 535 |
0x0000 ... 0xFFFF |
| 32 бита (двойное слово) |
4 байта |
0 ... 4 294 967 295 |
0x00000000 ... 0xFFFFFFFF |
Перенос из старшего разряда (2n) фиксируется аппаратным флагом CF (Carry Flag).
Числа со знаком: прямой, обратный и дополнительный коды
Старший (MSB) бит отводится под знак: 0 — плюс, 1 — минус.
| Код |
Принцип кодирования отрицательного числа -X |
Проблема в архитектуре |
| Прямой |
Знаковый бит 1, остальные биты — модуль |X|. |
Два нуля (+0 и -0). Сложнейшая аппаратная схема вычитания. |
| Обратный |
Знаковый бит 1, побитовая инверсия значащих бит. |
Два нуля. Требует циклического переноса единицы. |
| Дополнительный |
Обратный код + 1 к младшему разряду: [-X] = NOT(|X|) + 1. |
Один нуль! Вычитание аппаратно заменяется суммированием. |
Диапазон n-битного доп. кода: [-2n-1; 2n-1 - 1]. Для 8 бит: [-128; +127]. Вес старшего бита равен -128.
Аппаратное вычитание через сложение в АЛУ
В арифметико-логическом устройстве нет отдельного узла вычитания: операция A - B преобразуется в A + [-B]доп.
Пример: вычислить 58 - 43 в 8-битном регистре:
1) |-43| = 43 = 00101101_2
2) Обратный код: 11010010_2
3) Дополнительный код: 11010010 + 1 = 11010011_2 (0xD3)
4) Сложение в сумматоре:
00111010_2 (+58)
+ 11010011_2 (-43 в доп. коде)
------------------------------
1 00001101_2 (9-й бит переноса отбрасывается!)
Регистр сохраняет 00001101_2 = +15_10. Проверка: 58 - 43 = 15.
Флаг знакового переполнения OF (Overflow Flag) фиксирует неверный знак результата при сложении однополярных чисел.
Вещественные числа и концепция плавающей точки
Целочисленные форматы с фиксированной точкой не могут охватить одновременно микромир (10-10) и макромир (1020).
Фиксированная точка
- Положение запятой жестко закреплено.
- Высокая скорость, узкий диапазон.
- Используется в бухгалтерских расчетах (целое число копеек).
Плавающая точка
- Экспоненциальная запись: X = ±M × 2e.
- Запятая перемещается («плавает») при нормализации.
- Огромный динамический диапазон при фиксированной длине слова.
Стандарт IEEE 754: архитектура Single (32 бита)
32-битное машинное слово делится на три независимых поля:
31 30 23 22 0
+--+------------+----------------------------------------------------+
|S | E (8 бит) | M (23 бита) |
+--+------------+----------------------------------------------------+
1 Смещенный Дробная часть мантиссы
бит порядок (без неявной единицы)
знака (e + 127)
- Знак S (1 бит): 0 — положительное число, 1 — отрицательное.
- Порядок E (8 бит): смещенный показатель степени E = e + 127.
- Мантисса M (23 бита): дробная часть после нормализации.
Смещение порядка +127 и неявная единица
Смещенный порядок (Bias = 127)
- Истинный порядок e ∈ [-126; +127].
- Прибавление 127 переводит диапазон в E ∈ [1; 254] (только беззнаковые числа).
- Аппаратный выигрыш: целочисленный компаратор процессора сравнивает вещественные числа без декодирования знака степени!
Неявная единица (Implicit 1)
- Любое двоичное нормализованное число начинается с единицы: 1.M × 2e.
- Хранить эту единицу в памяти бессмысленно.
- Она не пишется в регистр, но восстанавливается FPU при расчетах. Точность мантиссы возрастает до 24 бит!
Специальные значения стандарта IEEE 754
| Порядок E |
Мантисса M |
Значение |
Смысл и поведение в архитектуре |
| E = 0 |
M = 0 |
±0 |
Положительный и отрицательный ноль (зависят от бита S). |
| E = 0 |
M ≠ 0 |
Денормализованное |
Числа вблизи нуля: (-1)S × (0.M) × 2-126. Плавное исчезновение точности (underflow). |
| E = 255 |
M = 0 |
±∞ |
Бесконечность (деление на ноль, переполнение разрядной сетки). |
| E = 255 |
M ≠ 0 |
NaN (Not a Number) |
Неопределенность: 0/0, √(-1), ∞ - ∞. Тихий (qNaN) и сигнальный (sNaN). |
Пошаговый перевод в IEEE 754 на примере -13.510
- Знак: число отрицательное ⇒ S = 1.
- Двоичный модуль: 1310 = 1101_2; 0.510 = 0.1_2 ⇒ 13.510 = 1101.1_2.
- Нормализация: 1101.1_2 = 1.1011_2 × 23 ⇒ e = 3.
- Смещенный порядок: E = 3 + 127 = 13010 = 10000010_2.
- Мантисса (23 бита): отбрасываем «1.», значащие биты «1011» дополняем нулями справа:
10110000000000000000000.
S | E | M
1 | 10000010 | 1011 0000 0000 0000 0000 000
Двоичный: 1100 0001 0101 1000 0000 0000 0000 0000
HEX: 0xC1580000
Кодирование текста: от ASCII к кодовым страницам
Таблица ASCII (7 бит)
- 128 кодовых позиций (0x00 ... 0x7F).
- Английский алфавит, цифры, знаки, 32 управляющих кода (CR, LF, TAB).
- Младший байт хранит символ, старший бит = 0.
Проблема кодовых страниц
- 8-й бит дал вторую половину таблицы (0x80 ... 0xFF).
- Для кириллицы созданы разные страницы: Windows-1251, KOI-8R, CP866.
- Несовместимость вызвала «кракозябры» при передаче файлов.
Стандарт Unicode и архитектура кодировки UTF-8
Unicode присваивает каждому символу уникальный код (Code Point, например, U+0410 = «А»).
| Коды Unicode |
Длина |
Битовый шаблон UTF-8 |
Что кодирует |
U+0000..U+007F |
1 байт |
0xxxxxxx |
Символы стандартного ASCII (совместимость 100%) |
U+0080..U+07FF |
2 байта |
110xxxxx 10xxxxxx |
Кириллица, греческий, арабский (каждая русская буква 2 байта!) |
U+0800..U+FFFF |
3 байта |
1110xxxx 10xxxxxx 10xxxxxx |
Иероглифы (CJK), математические символы |
U+10000..10FFFF |
4 байта |
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Эмодзи, редкие исторические знаки |
Кодирование растровой графики
Растровое изображение — двумерный массив дискретных пикселей (W × H).
Параметры растра
- Разрешение: W × H (например, 16 × 16 = 256 точек).
- Битовая глубина (b): бит на пиксель.
- Число цветов: K = 2b.
Глубина цвета в индустрии
- b = 1: Монохром (21 = 2 цвета).
- b = 4: 16 цветов (индексированная палитра).
- b = 8: 256 цветов (палитра / градация серого).
- b = 24: TrueColor (RGB 8:8:8, 16.7 млн цветов).
- b = 32: RGBA (RGB + альфа-канал прозрачности).
Расчет объема видеопамяти и выравнивание строк
Формула сырого объема несжатого растра:
Vbits = W × H × b (бит), Vbytes = (W × H × b) / 8 (байт)
Пример для значка 16 × 16 (N = 256 пикселей):
- Монохром (1 бит): 256 × 1 = 256 бит = 32 байта.
- TrueColor 24 бита: 256 × 24 = 6144 бит = 768 байт.
Аппаратное выравнивание (Scanline Padding): В форматах типа BMP каждая строка обязана быть кратна 4 байтам (32 бита шины памяти), недостающие байты заполняются нулями.
Двоичная логика в жизни
Атрибуция: Мем «Mathjoke (10 types of people in the world)». Автор: MjolnirPants (Wikimedia Commons). Источник: Wikimedia Commons (File:Mathjoke.jpg). Лицензия: Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0). Изменения: оптимизировано разрешение и конвертировано в автономный офлайн Data URI без изменения содержания.