title: C enter a if block when the condition is false
body: <p>A bitmap sort programme,in which the assign part is:</p>
  
  <pre><code>for(i = MAX/64-1;i &gt;= 0;i--){
      for(j = 0;j &lt; 64;j++){
          if(0 != (arr[i] &amp; (1 &lt;&lt; j))){
              *p++ = j + 64 * i;  
          }   
      }   
  }
  </code></pre>
  
  <p>I gdb it,sometimes when the if condition returns 0 and the program still enter the block and execute the statement:<br>
  <code>*p++ = j + 64 *i;</code><br>
  which cause segmentfault at last,I just don't understand under which circumstance would it happen</p>
  
  <p>example:<br>
  when gdb status like this:<br>
  j=44, i=6250, arr[i]=4096  and <code>print (arr[i] &amp; (1 &lt;&lt; j))</code> gives 0<br>
  but programme still enter the block</p>