#include<stdio.h>
#include<math.h>
int main(){
int arr[255],temp[255], bit_len, parity_len, i, j, bit, xor, ls;
printf("Enter the number of bits : ");
scanf("%d",&bit_len);
printf("Enter the bits : \n");
for(i=0 ; i < bit_len ; i++){
scanf("%d",&arr[i]);
}
// 2^r >= n + r + 1 // 1 0 1 1 ,
for(parity_len=0 ; pow(2,parity_len) < bit_len + parity_len + 1 ; parity_len++);
printf(" Parity len = %d\n", parity_len);
for( i=1 , bit=0, j = bit_len - 1 ; i <= bit_len + parity_len ; i++ ){
if(i == pow(2,bit)){
temp[i-1] = 0;
bit++;
}else{
temp[i-1] = arr[j--];
}
}
printf(" [ ");
for(i = bit_len + parity_len -1 ; i >= 0 ; i--){
printf(" %d ",temp[i]);
}
printf(" ] \n");
for(bit = 0 ; bit < parity_len ; bit++){
xor = -1;
for (int j = parity_len + bit_len; j >= 1; j--)
{
ls = j & 1 << bit;
if (ls && j != pow(2, bit))
{
if (xor == -1)
{
xor = temp[j-1];
}else{
xor = xor ^ temp[j-1];
}
}else if (j == pow(2, bit))
{
temp[j-1] = xor;
}
}
}
printf(" [ ");
for(i = bit_len + parity_len -1 ; i >= 0 ; i--){
printf(" %d ",temp[i]);
}
printf(" ] \n");
return 0;
}
Output :
Enter the number of bits : 7
Enter the bits :
1 0 0 1 1 0 1
Parity len = 4
[ 1 0 0 0 1 1 0 0 1 0 0 ]
[ 1 0 0 1 1 1 0 0 1 0 1 ]
Explanation :
Comments
Post a Comment