Как мне вычислить бит чётности у байта в CodeVisionAVR?
-
port_wine777
- Открыл глаза
- Сообщения: 61
- Зарегистрирован: Пн окт 03, 2011 09:49:59
Как мне вычислить бит чётности у байта в CodeVisionAVR?
Здравствуйте. Помогите пожалуйста кодом. Есть переменная unsigned char (байт), как мне вычислить бит чётности этого байта и поместить допустим во младший разряд другой байтовой переменной. У AVR есть же флаг чётности? или нужно по другому вычитать?
Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?
Нет такого флага. Вычислять циклическим сдвигом или по таблице. CV AVR не пользуюсь потому строчку кода не привожу.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?
Один из вариантов:
Под битом четности байта я понял то, что байт четный или нечетный. Или же подразумевается число единиц в байте?
Код: Выделить всё
var2= var2 & 0xFE | (var1 & 0x01);Под битом четности байта я понял то, что байт четный или нечетный. Или же подразумевается число единиц в байте?
Docendo discimus
Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?
Код: Выделить всё
uint8_t value;
uint8_t parity; // Начальное значение можно выбрать любым, от этого только инвертируется результат.
parity ^= value >> 0;
parity ^= value >> 1;
parity ^= value >> 2;
parity ^= value >> 3;
parity ^= value >> 4;
parity ^= value >> 5;
parity ^= value >> 6;
parity ^= value >> 7;
parity &= 0x1;
Ну или таблицей из 256 заранее вычисленных значений.
Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?
Или из 16 байт по старшей и младшей тетраде, а потом объединить.
Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?
Так гораздо короче
Код: Выделить всё
uint8_t value;
uint8_t parity;
parity = (value >> 4) ^ value;
parity ^= parity >> 2;
parity ^= parity >> 1;
parity &= 0x1;