Представление данных в компьютере
Кодирование информации — отображение данных на кодовые слова.
Обычно в процессе кодирования информация преобразуется из формы, удобной для непосредственного использования, в форму, удобную для передачи, хранения или автоматической обработки. В более узком смысле кодированием информации называют представление информации в виде кода. Средством кодирования служит таблица соответствия знаковых систем, которая устанавливает взаимно однозначное соответствие между знаками или группами знаков двух различных знаковых систем.
Виды кодов
Код фиксированной длины (fixed-length code) — кодирование каждого символа производится с помощью строк одинаковой длины. Также он называется равномерным или блоковым кодом.
Код переменной длины (variable-length code) — кодирование производится с помощью строк переменной длины. Также называется неравномерным кодом.
Префиксный код — код, в котором, никакое кодовое слово не является началом другого. Аналогично, можно определить постфиксный код — это код, в котором никакое кодовое слово не является концом другого.
Все вышеперечисленные коды являются однозначно декодируемыми (англ. uniquely decodable) — для такого кода любое слово, составленное из кодовых слов, можно декодировать только единственным способом.
Примеры кодов
ASCII — равномерный.
Код Хаффмана — префиксный.
Азбука Морзе — не является ни равномерным, ни префиксным, тем не менее, однозначно декодируемый за счет использования пауз.
Любые данные (числа, символы, графические и звуковые образы) в компьютере представляются в виде последовательностей из нулей и единиц. Эти последовательности можно считать словами в алфавите {0,1}, так что обработку данных внутри компьютера можно воспринимать как преобразование слов из нулей и единиц по правилам, зафиксированным в микросхемах процессора. Такой взгляд роднит вычислительные машины с абстрактными вычислителями (машины Тьюринга, нормальные алгоритмы Маркова).
Элемент последовательности из нулей и единиц (член такой последовательности) называют битом. Именительный падеж — бит.
Как определить, какое целое число представляет тот или иной битовый набор? Возможны разные способы. Например, можно считать, что представляемое число равно количеству единиц в битовом наборе ("единичная" система счисления). Такой способ позволяет представить всего k различных целых чисел от 0 до k—1, где k — длина набора. Очевидно, что этот способ неэкономный — одному и тому же числу могут соответствовать несколько различных наборов. Количество всевозможных битовых наборов длины k равно 2k , поэтому выгоднее различным наборам поставить в соответствие различные числа. Это позволит представить 2k различных чисел. Обычно рассматривают диапазон целых чисел от 0 до 2k -1.
Существует всего (2k)! (количество перестановок из 2k элементов) способов закодировать беззнаковые числа битовыми наборами. Среди всех этих теоретически возможных способов представления чисел наиболее удобен для проведения вычислений такой: битовый набор, соответствующий числу, является k-разрядной записью этого числа в двоичной системе счисления. Таким образом, можно реализовать арифметические операции над числами, используя известные школьные алгоритмы поразрядной обработки для битовых наборов.
Выбор способа хранения целых чисел в памяти компьютера — не такая тривиальная задача, как могло бы показаться на первый взгляд. Желательно, чтобы этот способ:
не требовал усложнения архитектуры процессора для выполнения арифметических операций с отрицательными числами;
не усложнял арифметические действия;
хранил бы одинаковое количество положительных и отрицательных чисел.
