title: What's does it mean of" /* overloaded elements data types */ #define OE_IS_ARRAY (1<<0) #define OE_IS_OBJECT (1<<1) #define OE_IS_METHOD (1<<2)"?
body: <p>Today,when I read php kernel codes, which in dir: <code>php5.3/Zend/Zend.h</code>, there was a line code make me confused.</p>
  
  <p>Code is follow:</p>
  
  <pre><code>/* overloaded elements data types */
  #define OE_IS_ARRAY     (1&lt;&lt;0)
  #define OE_IS_OBJECT    (1&lt;&lt;1)
  #define OE_IS_METHOD    (1&lt;&lt;2)
  </code></pre>
  
  <p>Is it means like this? And I use int type which has four bytes,it shows left shift operations.</p>
  
  <pre><code>0000 0000 0000 0000 0000 0000 0000 0000 = 0
  After 1 &lt;&lt;
  0000 0000 0000 0000 0000 0000 0000 0000 = 0
  ___________________________________________
  
  0000 0000 0000 0000 0000 0000 0000 0001 = 1
  After 1&lt;&lt;
  0000 0000 0000 0000 0000 0000 0000 0010 = 2
  ___________________________________________
  
  0000 0000 0000 0000 0000 0000 0000 0010 = 1
  After 1&lt;&lt;
  0000 0000 0000 0000 0000 0000 0000 0100 = 4
  </code></pre>
  
  <p>But if she/he want do this why not just assign the const variables directly?</p>
  
  <pre><code>/* overloaded elements data types */
  #define OE_IS_ARRAY     (0)//turn the 1&lt;&lt;0 directly
  #define OE_IS_OBJECT    (2)//turn the 1&lt;&lt;1 directly
  #define OE_IS_METHOD    (4)//turn the 1&lt;&lt;2 directly
  </code></pre>
  
  <p>If you know please help me ,thanks a lot! :)</p>