title: Hamming Code Error Detection
body: <p>I have this code as given below for error checking by using hamming codes.
  I went through the algorithm on Wikipedia and also understood its working as described in the thread <a href="https://stackoverflow.com/questions/388599/how-does-the-hamming-code-work">How does the Hamming code work?</a></p>
  
  <p>But the code below uses some kind of sum of the parity bits in order to detect which bit is the error.</p>
  
  <p>Can someone please explain how exactly the sum can be used to detect the error bit?</p>
  
  <p>code:</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  #include&lt;math.h&gt;
  void main()
  {
      int i,a[4],c[3],r[7],clk[3],n,sum=0;
      printf("Enter data bits\n");
  
      for(i=3;i&gt;=0;i--)
          scanf("%d",&amp;a[i]);
      printf("\n");
  
      c[0]=(a[0]+a[1]+a[2])%2;
      c[1]=(a[1]+a[2]+a[3])%2;
      c[2]=(a[1]+a[0]+a[3])%2;
  
      printf("data bits after hamming code is\n");
  
      for(i=3;i&gt;=0;i--)
          printf("%d",a[i]);
      for(i=2;i&gt;=0;i--)
          printf("%d",c[i]);
      printf("Enter recieved code\n");
      for(i=0;i&lt;7;i++)
          scanf("%d",&amp;r[i]);
  
      clk[0]=(r[3]+r[1]+r[2]+r[6])%2;
      clk[1]=(r[0]+r[2]+r[1]+r[5])%2;
      clk[2]=(r[0]+r[2]+r[3]+r[4])%2;
  
      sum=4*clk[2]+2*clk[1]+1*clk[0];
  
      if(sum==0)
          printf("\n u have recived coorrect code\n");
      if(sum==1)
      {   printf("Error in check bit 2\n");
          printf("The correct code is");
          r[6]=(r[6]+1)%2;
          for(i=0;i&lt;7;i++)
          printf("%d",r[i]);
      }
      if(sum==2)
      {
          printf("Error in check bit 1\n");
          printf("The correct code is");
          r[5]=(r[5]+1)%2;
          for(i=0;i&lt;7;i++)
          printf("%d",r[i]);
      }
      if(sum==3)
      {
          printf("\nError in data bit 1");
          printf("The correct code is");
          r[1]=(r[1]+1)%2;
          for(i=0;i&lt;7;i++)
          printf("%d",r[i]);
      }
      if(sum==4)
      {
          printf("\n Error in chect bit 0");
          printf("The correct code is");
          r[4]=(r[4]+1)%2;
          for(i=0;i&lt;7;i++)
          printf("%d",r[i]);
      }
      if(sum==5)
      {
          printf("\n Error in data bits 3");
          printf("The correct code is");
          r[3]=(r[3]+1)%2;
          for(i=0;i&lt;7;i++)
          printf("%d",r[i]);
      }
      if(sum==6)
      {
          printf("Error in data bits 0");
          printf("The correct code");
          r[0]=(r[0]+1)%2;
          for(i=0;i&lt;7;i++);
          printf("%d",r[i]);
      }
      if(sum==7)
      {
          printf("Error in data bits 2");
          printf("The correct code is");
          r[2]=(r[2]+1)%2;
          for(i=0;i&lt;7;i++)
          printf("%d",r[i]);
      }
  }
  </code></pre>