title: What do these C operators mean?
body: <p>I'm reading the book "Programming Challenges: The Programming Contest Training Manual" and are implementing a problem where I do not understand the use of operators c>>1 and the comparison if (n&amp;1), someone could help me to know they mean?</p>
  
  <p>this is the example code</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  
  #define MAX_N 300
  #define MAX_D 150
  
  long cache[MAX_N/2][2];
  
  void make_cache(int n,int d,int mode)
  {
      long tmp[MAX_D];
      int i,count;
  
      for(i=0;i&lt;MAX_D;i++) tmp[i]=0;
  
      tmp[0]=1;count=0;
  
      while(count&lt;=n)
      {
          count++;
  
          for(i=(count&amp;1);i&lt;=d;i+=2)
          {
              if(i)
                  tmp[i] = tmp[i-1] + tmp[i+1];
              else if(!mode)
                  tmp[0]=tmp[1];
              else
                  tmp[0]=0;
          }
  
          if((count&amp;1)==(d&amp;1))
              cache[count&gt;&gt;1][mode]=tmp[d];
      }
  }
  
  int main()
  {
      int n,d,i;
      long sum;
  
      while(1)
      {
          scanf("%d %d",&amp;n,&amp;d);
  
          if(n&amp;1)
              sum=0;
          else if(d==1)
              sum=1;
          else if(n&lt;(d&lt;&lt;1))
              sum=0;
          else if(n==(d&lt;&lt;1))
              sum=1;
          else
          {
              make_cache(n,d,0);
              make_cache(n,d,1);
              sum=0;
  
              for(i=0;i&lt;=(n&gt;&gt;1);i++)
                  sum+=cache[i][0]*cache[(n&gt;&gt;1)-i][1];
          }
  
          printf("%ld\n",sum);
      }
  
      return 0;
  }
  </code></pre>