Как рассчитать бит четности следующей битовой последовательности?

Последовательность:

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;
}
Другие вопросы по тегам