 <p>It's a bitwise Or, if you have binary values it or's each of them together</p> <pre><code>00010110 10110000 --------- 10110110 </code></pre> <p>For each bit, the output will have a <code>0</code>, if <strong>both</strong> of the corresponding input's bits have a <code>0</code>. If either or both input's bits have a <code>1</code>, it will output <code>1</code> in that slot. </p> <p>It's kinda like an <code>||</code>, except it checks on each individual bit, instead of the whole number.</p> <hr> <p>In your case </p> <p>The way your particular example what you're doing is encoding 2 conditions into a single value, has to do with masking. </p> <p>Suppose <code>InputType.TYPE_CLASS_TEXT</code> was equal to <code>8</code> or <code>00001000</code></p> <p>And suppose <code>InputType.TYPE_TEXT_VARIATION_PASSWORD</code> was equal to <code>32</code> or <code>00100000</code></p> <p><code>InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD</code> would be equal to <code>00101000</code> or <code>40</code>.</p> <hr> <p>When you want to read them, you use bitwise <strong>anding</strong>. It's the exact opposite of oring. IT returns true only if both values are 1.</p> <pre><code>00010110 10110000 --------- 00010000 </code></pre> <p>To check if your value contains a result, you simply <code>and</code> it to the type</p> <pre><code>00101000 - 40 - Your result 00001000 - 8 - InputType.TYPE_CLASS_TEXT -------- 00001000 - 8 - this means that your result contains `InputType.TYPE_CLASS_TEXT` </code></pre> <p>in code, the check might look like this.</p> <pre><code>if(myInputType &amp; InputType.TYPE_CLASS_TEXT != 0) //myinput type cointains TYPE_CLASS_TEXT </code></pre>