Искусство программирования на Си (984073), страница 57
Текст из файла (страница 57)
Гог (сомах О; соаат < 81 "++соцас) ности можно заключить, что обе они асрны. Прслпозожим, что мы можем принять соглашение Но что означает их несоападсние? Скорее Осего, о том, что при обработке текста А9СП с использояаниодна из них верна, а другая содержит ошибки, но ка- см по одному ок1сту лля каждого символа будет аыполкая именно! Ч го делать — подбрасывать монету! няться проасрка младших семи битов дзя определения (В (Ееир) Хорошо, дааайтс отправим три отдельные копии. того, четное ити нечетное количсстао единичных битов ( дна а ~н нн~е|нн ье теь тннесннн раз дель гмр Ф ча ть!и Впсег пр Ео гО сь * сгеге: ОЗгэ4507ВЭ Таким образом, использование бита четности само Если зап>стить эту програлгл3у в системс, в которой ного деления Чтобы понять и использовать этот код, Ох30 хв ОхЗО чЗОЬ ечеп рагхву по себе является слабым средством.
Можно было бы использ>ется набор символов ЛЗГИ, то в отве~ на при- не требуется понимания этой концепции или дюкс озна- прсдположить, что вероятность лвух ошибок в одном глашение ввести фразу "НОПо Удог10" на экране должно комления с ней. Б рсальнои реазизации этого метода исОх32 зв Оха2 в11Ь ечеп раг11у октсте сравнительно низка, но в некоторых ситуациях, отобразиться следующее: пользуются всего лишь побитовые операторы сдвига ло- ОхЗЗ ха Ох33 ч1ЕЬ ечеп раг>еу особенно при определенных условиях помех во время Впгег в еьгхпв: Не11о Иог1о гичсского И применительно к целым типам без знака.
Ох35 зв Ох35 е11Ь ечеп раг11у передачи, возможно лавинообразное накопление оши- Тье сЬескепе оу "Неззо Иогзд" 1е 1052 Любои из вас, кого воспоминания о школьном курОхЗб хв Ох36 ч>ОЬ ечеп рагзау бок, когда искажаются несколько следуюцзих один за аес1еаз, 41С Ьех сс ачгебры нс приводит в содрогание, вероятно, вспомОх37 Зв Оха7 изЕЬ ечеп раг11у другим битов. Такис ситуации встречаются еще доста- нит полиномиьльныс уравнения. Например, уравнение Охзв За Охаа и1ЕЬ ечеп рагбеу Одним из возможных способов добавления возмож- точно часто в некоторых приложениях, например, для второй степени для параболы имеет форму у= ах'эЬхэс.
Охзэ 14 Охзв ь1ЕЬ ечеп рвг1еу ности выявления ошибок к файлу было бы считывание обмена данными через последовательные интерфеисы. Здесь значения а, Ь и с называют коэффициентами, а символьных перелыгиных без знака по одной и сул~миФактичсски система, используюшая признак четно- сам полипом имеет вторую степень, поскольку наивыссти, будет выявлять нскоторос нечетное количество КОНТРОЛЬНЫВ СУММЫ рование пол>чснных значений. Затем нужно было бы шсй сгспснью аргул3ента х является вторая. дописать дополнение вычисленного значения в качестве ошибок в битах: три, пять или сел~ь.
Прсдположиьл что Возникает вопрос, какое отношение все это имеет к Один из л3стодов включения проверки ошибок в данныс— дополнительного байта к концу файла. Позлнсе можно все три младших бита кода АВСП для О, т.е. ОхлО, из- потокам битов" .Давайтс начнем со скромного символа создание контрольных сумм. При этом используется было бы снова проверить файл путем считывания по меняются на !. Результатом этого является Ох37, что А в коле ЛЗСИ, числовое значение которого составляет возможность рассмотрения данных в качестве массива одному байту (включая последний добаанснный байт соответствует 7 в коде АЗСИ, но он имеет неправиль- Ох41 или 01000001, как в 8-битовом октете.
Это значе- символьных переменных без знака в памяти либо пото- контрольной суммы) и сумл<ирования. Если результат ный признак четности. В данном случае осушсствляст- нис можно рассматривать в качестве полинома, все ко- ка символьных переменных без знака при записи или нс равен О, значит, файл был поврежден. Но равенство ся только выявление ошибок без какой-либо возможно- эффициснты которого равны либо 1, либо 0 в зависи- иб,н и считывании из потоков, которыми могут быть файлы на результата 0 сшс нс гарантирует сохранность данных сти их исправления, поскольку ошибка четности мости от бизов в строке.
Таким образом, октет. диске или коммуникационные канаты. Кроме того, Давайте снова зап>стим программу сйес>01не.с, но на Данизнитезинын зненатинесние разделы ИП- ОГзрабитна нибзриныг оигназин 1 $ Часть И! $ Проверка СКС может быть реализована побитояо, и ° СКС!6 использует значение СКС, ралнос Ол3005 (я Листинг 18.11. Функция СКССС!ТТ().
именно так она была первоначально якяючена я такое лсйстаительности — Ох!8005). Этот алгоритм иници- нпаздпеб аЬогС оборудование, как контроллеры дисков и платы сетевых ализнрует генератор значением 0 и обращает порядок СаССС1ТТ(нпагдпеб сЬаг 'баСа, ягхе С 1епдСЬ. имя существующего файла, когорьзй он открывает я двоинтерфеисоя, которые имеют дело с последоаатсльны- слсдопания битов а октегах данных и в конечном осми потоками данных, передаваемыми по одному биту. татке СКС, ногаю«е не требует заключительной опе- айтов из памяти я Этот метод обработки одного бита за другим может рации исключающего ИЛИ.
быть воспроизведен я программе, но, как иллюстрируДяс наиболес популярные подпрограммы СКС иснпагдпеб гпС сгс = аееб; числсния значения СКГ, которос она отображает на ют примеры сжатия Т.4, обработка по одному биту пользуют значения генераторов СКС, значительно от- экранс. Программа также сохраняет !6-битояый СКС я малоэффективна. личающисся одно от другого.
Выбор подходящего зна- (ог (сонпС = О; сопле < 1епдСЬ; ++сосне) двух послслних переменных типа нпз!япеб сиаг и буфеВсе алгоритмы с использованием СКС вЂ” полностью чения требует кропотливого математического анализа ( рс младшим октетом япсред, хотя программа может радетепминиропанные. Лля любого заданного текущего севр = [ "баса++ " ( сгс» а ) ) а Ох(11 яозможных ошибочных послсдояательностей и выходит ботать на процессорах, использующих любую последозначения бита после обработки следующего бита суще- сгс = сгс СаЫе(Севр! " (сгс « а); далеко за возможности большинства программистов и > — .
' Оатсльность октетов. И а заключении она снопа стауст только даа возможных новых значения, в зааи- рядовых математикоп В часто используемых форматах геснгп (нпа)дпеб аЬогС)(сгс " Сгпа1); вызыааст функцию СКССС)ТТ() с параметром азины, симости от того, равен он (попый бит) 0 или 1. После применяются хорошо подобранные значения, которью ) равным 258 (исходныс данные плюс СКО, и снова отообработки следующих ляух битов сущестпуст только опраядази себя за долгие годы ил использояания. б, брахсает результат. четыре возможных новых значения, а зависимости от Есть преимущество инициализашзи генератора зна- Здссь сгс (аЫе — массив констант, состоящий из Прсзтзагаю пам поэксперимснтироаап с этой протого, являются ли они 00, 01, 10 или 11.
Поскольку чсняем, отличным от О, как это делается и СКС-СС!ТТ, 256 значений типа нпа!йпеб зйог(. Переменная Сезпр а грамлюи,создавдасидснтичныскопиифайла,содсржаоктст может содержать только 256 значений, можно но не делается я СКС)6. Если начать со значения О, лсйстпитсльности необязательна, поскольку без нес асс шсго, по мсныпсй лзсрс, 256 байтов. Теперь измените сгснсрипопать таблицу подстаноаок, содержащую 256 послсдоаатсльность начальных битов 0 любой длины гснсриропанис нового значения СКС можно было бы олин бит и любом из первых 256 байтов и любом фай- Дололнительние теиатинеоеие раздает Обратнннно Нифров те гиен а те 1 Часть й1 Глава 15 ! (с,д), где Π— исходнос количество битов данных в ело- шсй мере, на единицу больше общего числа битов в за- шего бита до С12 для старшего бита.
Эта визуализация Более простой метод — использование позиционного вс ланных, а с — количество битов в закодированном колированном слове. помогает понять кодирование и проверку кодов Гаммин- алгоритма. Взгляните на заново обозначенные позиции слове, включая биты четности Гамминга. Количесе.во Рассмотрим код Гамминга (12,4), поскольку он име- га.
Реальные обрабатываемые биты необязательно дол- битов на рис. !8.4, где биты пронумерованы от С! до битов четности Галеминга р равно с — г). В случае копи- ст несколько важных областей применения, Для кажло- жны физически размещаться таким же образом. С12. Начните со значения Гамминга, равного О, и прорования Галеминга (7,4) три бита четности (р) лобавля- го 8-битового октета генерируется четыре бита четнос- верьте каждый бгп данных в исходном октетс Если бит ются к четырем битам данных (д), давая общую длину ти Гамминга, или контрольных бита. Два октета с 07 05 05 04 05 02 01 00 07 0 04 2 01 Оо равен 1, выполните операцию исключающего ИЛИ лля закодированного слова (с), равную семи битам.
контрольными битами помсшаются в трех октетах, что номера "С" этого бита и значения Гамминга. Все колы Гамминга должны соответствовать соотно- улобно лля хранения или передачи посредством стан- Оба этих метода присутствуют в функциях програмшению дартных 8-битовых периферийных устройств.
мы Ьаппп!Вй с (на %Об-сайте "ДиаСоФт" ) хотя они и не д+р41<=2е На рис. 18.4 показан метод визуализации 8-битово- используются, поскольку программа содержит также го октета, объединенного с его четырьмя контрольны- заранее определенную таблицу кодов Гамминга (лис шнг При любом количестве битов четности Р сушсству- х,и бита~и вход Гамхшща Исходнье лосси„битовда„ 18.13). ст 2' возможных комбинаций этих битов. Иначе говоныл распределяются по конечному 12-бгповому 07 06 05 04 Н4 03 02 01 НЗ СО Н2 Н1 Программа запрашивает допустимое значение октсря, в случае (7,4) с тремя битами чстнгкти существует результату, причем контрольные б1пы Гамминга встав- С12 С11 С10 Сэ СВ СТ Св С5 С4 СЗ С2 С1 та (от О ло 255) н количества битов (от О до 7).