![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Помогите пожалуйста разобраться как правильно. А то на вики пишут так, в другом месте сяк
Есть последовательность из 5 битов. Первые 4 - это данные, 5й - бит чётности. 1101 - данные Вариант проверки 1 В этом коде 3 единицы, а 3 - нечётное число, значит бит чётности будет 1 Вариант 2 делается логическая И с маской 0001 1101 & 0001 = 0001 Получаем 1 - нечётное. Ну и правильно, 1101 это 13. А 13 нечётное А теперь 1111 - данные при первом варианте будет 0, так как там 4 единицы, а 4 - чётное во втором варианте будет 1 - нечётное, 1111 это 15 - нечётное число Так вот как правильно? |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
supercelt, это две разные вещи, четность числа, и четность данных
Четность числа определяется его младшим битом. Четность данных это четность количества единиц в битовом представлении числа. Его еще называют паритет. И естественно четное число может быть с нечетным паритетом, и наоборот. Добавлено через 2 минуты и 30 секунд
в данном случае имеется в виду именно паритет. |
|||
|
||||
supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
спс
|
|||
|
||||
TarasProger |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Это два разных бита чётности. В одном случае это бит, обеспечивающий чётность количества единичных бит во всей пятёрке, что связано с особенностями физического уровня протокола, а в другом это флаг чётности самого значения.
Это сообщение отредактировал(а) TarasProger - 12.8.2015, 14:26 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Наверное, имелось в виду "четвёрке"? Это сообщение отредактировал(а) feodorv - 12.8.2015, 16:38 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
TarasProger |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Пятёрке: 4 бита данных он не трогает, количество единичных бит в ней может быть любым, в том числе и нечётным, но в этом случае бит партитета тоже единичный и он то один, в сумме с битами данных количество единичных бит чётно, если же количество единичных бит данных уже чётно, то паритетный бит нулевой, в сумме опять таки количество единичных бит чётно.
Добавлено @ 19:01 Например, единичные биты - одиночные импульсы чередующихся разрядностей, а ноли - отсутствие импульсов, + пилотон на весь пакет. Если количество единичных бит не чётно, то имеем не нулевую составляющую нулевой частоты, которая плохо идёт по кабелю, а если оно чётно, то всякие отличия среднего от ноля случайны, бит паритета даёт гарантию номинального ноля в компоненте нулевой частоты, а дрейф ноля можно не передавать, не страшно. Равное количество нолей и единц одним дополнительным битом не обеспечишь, для этого нужна 100% избыточность, да и договориться о том, какая полярость будет единицей, а какая нолём можно в одном устройтсве, но не в распределённой сети. А чётность количества единиц с меньшими затратами. Добавлено через 9 минут и 50 секунд Не надо рассказывать про самосинхронизацию каждого бита, это был просто максимально упрощённый пример. Это сообщение отредактировал(а) TarasProger - 12.8.2015, 19:02 |
|||
|
||||
supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Да имелось ввиду в 4. пятый - бит чётности. Может тогда подскажете как работает эта функция. Описано что она проверяет 4 бита на чётность. Но я не понимаю смысл этой функции или... алгоритм
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну, тут явно идёт речь о байтах, не о битах. А как Вы в коде задаёте последовательность этих 4 или 5 бит?
Добавлено через 36 секунд Да, прошу прощения. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Вычислить паритет 4-х младших бит целочисленной переменной можно по-разному.
Например так:
Можно с использованием таблицы:
Объединяя биты паритета в таблице parityTable в одно число, получаем такую функцию:
Это сообщение отредактировал(а) feodorv - 12.8.2015, 20:46 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
TarasProger |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) TarasProger - 13.8.2015, 06:17 |
|||
|
||||
TarasProger |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
По-хорошему так:
Это сообщение отредактировал(а) TarasProger - 13.8.2015, 07:23 |
|||
|
||||
TarasProger |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Можно ещё сложить значения паритетов в массив, индексируемый значеними байтов.
Добавлено через 41 секунду Первый вариант конкетное отображение битовых полей на биты не учитывает. |
|||
|
||||
TarasProger |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Аппаратура последовательного порта, сетевой карты с разъёмом BNC, или сетевой карты под витой кабель, исспользующей на передачу ровно одну пару жил кабеля,
вполне справляется с передачей единичного бита, а кратность посылок восьми реализуется управлением этой аппаратурой, возможно даже программно или микропрограммно. При наличии битов чётнлости, паритета, или любых других дополниельных бит кратность оказывается другой. Но в принципе можно обеспечить такую кратность количества байт, чтоб снова получить кратность количества бит восьми, чтоб сформировать всю последовательность как есть в памяти. Например, пусть посылаются восьмибитные байты с паритетом на уровне полубайта. Тогда кратность 10. Но 5 байт равны как раз 40-ка байтам, что вполне кратно и восьми, и десяти. Тогда количество байт данных кратно 4-м, а 5-й байт содержит паритеты для всей четвёрки, но его биты можно перемешать с битами данных, разместив по одному после каждых четырёх бит данных. Если есть и чётность числа на уровне байта, и паритет на уровне полубайта, то получаем кратность 11, количество байт должно быть кратно 11, тогда количество бит будет кратно и 8-ми, и 11-ти: на каждые 8 байт данных приходится 3 байта дополнительной информации, перемешиваемых с данными так: 4 бита данных, 1 доплнительный (паритет старшего полубайта), 4 бита данных, 2 дополниельных (паритет младшего полубайта и чётность), 4 бита данных, 1 доплнительный (паритет старшего полубайта), 4 бита данных, 2 дополниельных (паритет младшего полубайта и чётность), 4 бита данных, 1 доплнительный (паритет старшего полубайта), 4 бита данных, 2 дополниельных (паритет младшего полубайта и чётность), 4 бита данных, 1 доплнительный (паритет старшего полубайта), 4 бита данных, 2 дополниельных (паритет младшего полубайта и чётность), 4 бита данных, 1 доплнительный (паритет старшего полубайта), 4 бита данных, 2 дополниельных (паритет младшего полубайта и чётность), 4 бита данных, 1 доплнительный (паритет старшего полубайта), 4 бита данных, 2 дополниельных (паритет младшего полубайта и чётность), 4 бита данных, 1 доплнительный (паритет старшего полубайта), 4 бита данных, 2 дополниельных (паритет младшего полубайта и чётность), 4 бита данных, 1 доплнительный (паритет старшего полубайта), 4 бита данных, 2 дополниельных (паритет младшего полубайта и чётность). При паритете на уровне полубайта и чётности числа в полубайте получам кратность количества бит 12-ти и кратность количества байт 3-м (3 байта - это 24 бита, кратно и 8-ми, и 12-ти), два дополниельных бита размещаются после каждых четырёх бит данных. Добавлено @ 08:00 Если иметь только паритет на уровне всего байта, то количество байт кратно 9-ти: 8 байт данных + 1 байт с паритетами. Обратите внимание: количество байт данных всё равно кратно степени двойки. Это сообщение отредактировал(а) TarasProger - 13.8.2015, 08:01 |
|||
|
||||
TarasProger |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Кроме лучшей передавабельности паритет может иметь и другое назначение с его помощью фиксируется факт наличия ошибок передачи любых бит в любом нечётном количестве. А одна ошибка вероятнее двух.
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
TarasProger, у ТС есть последовательность 5 бит, при чем здесь байты? При чем здесь линии связи и всё остальное? Зачем всё это написанное? Вы окончательно запутываете тему. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |