Algorithm,  Study

[Algorithm] Parity Bit

데이터의 무결성을 확인하기 위한 방법 중 하나로 보내는 data의 1의 개수가 홀수인지 짝수인지 확인하여 받는 쪽에서도 동일한지 확인하는 방법이다.

예를 들면 ‘a’ ASCII data를 보낸다고 했을 때 0110_0001 (97)의 data가 전송 될 것이다. 만약 짝수 정책 (even parity)를 사용한다고 했을 때, 1의 개수는 현재 3개이기 때문에 추가적으로 1개를 최상위 bit에 추가해주고 전송해준다. Example code는 아래와 같다.

#include <stdio.h>                                                                                                                                                         

unsigned int hammingWeight(unsigned int data) {
    unsigned int res = data - ((data >> 1) & 0x55);
    res = (res & 0x33) + ((res >> 2) & 0x33);
    return (res  (res >> 4)) & 0x0F;
}

int main() {
    char data = 'a';

    if(hammingWeight(data)%2 == 1)
        data |= 0x80;

// --------- data transfer ---------

    if(hammingWeight(data)%2 == 0)
        printf("Data is valid\n");
    else
        printf("Data is invalid\n");
    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *