Как рассчитать бит четности следующей битовой последовательности?
Последовательность:
00111011
Как рассчитать бит четности для вышеуказанной последовательности? Этот вопрос из базы данных - полная книга Джеффри Уллмана (Упражнение 13.4.1 а)
Я не уверен, каким должен быть ответ на этот вопрос.
Это так просто, как:
i) Четная четность: число 1 равно 5 (нечетное), поэтому просто добавьте 1 и ответ: 001110111
ii) Нечетное соотношение: аналогично, просто добавьте 0: 001110110
ИЛИ ЖЕ:
я нахожусь на совершенно неправильном пути здесь? Я посмотрел в сети, но не смог найти ничего конкретного. Также текст по вышеуказанному вопросу в учебнике неясен.
5 ответов
Да, ваши ответы верны. Для данной последовательности
00111011
Нечетная четность равна 001110110, бит четности равен нулю, поэтому общее число единиц в коде равно 5, что является нечетным числом.
Четность четности равна 001110111, бит четности равен единице, поэтому общее число единиц в коде равно 6, что является четным числом.
unsigned char CalEvenParity(unsigned char data)
{
unsigned char parity=0;
while(data){
parity^=(data &1);
data>>=1;
}
return (parity);
}
Вы также можете использовать XOR т.е. 00111011
0XOR0=0
0XOR0=0
0XOR1=1
1XOR1=0
0XOR1=1
1XOR0=1
1XOR1=0
0XOR1=1
, Последний бит - бит четности; 1 для четной четности, 0 для нечетной четности. Вы должны сделать этот бит младшим битом исходного номера (00111011), став таким образом (001110111).
Альтернативная реализация паритета:
Это включает в себя выполнение XOR между последовательными битами в определенном числе в целом числе.
X >>1 влево сдвигает значение на 1 бит, а & 1 возвращает нам значение последнего бита числа.
Четность всей последовательности можно визуализировать, как показано ниже:- то есть из-за свойств XOR.
1 ^ 0 ^ 1 совпадает с (1 ^ 0) ^ 1, и мы расширяем то же самое.
def parity_val(x):
parity=0
while x>>1:
parity = (x & 1)^ ((x >>1) & 1)
x = x>> 1
return parity
Вот простое решение без каких-либо циклов для 16-битной последовательности, поскольку данная последовательность соответствует 16-битному числу. Вы получите 1 для нечетного количества установленных битов и 0 для четного количества установленных битов.
uint8_t parity(uint16_t data) {
data ^= data >> 8;
data ^= data >> 4;
data ^= data >> 2;
data ^= data >> 1;
return data & 1;
}