title: How are integers internally represented at a bit level in Java?
body: <p>I am trying to understand how Java stores integer internally. I know all java primitive integers are signed, (except short?). That means one less bit available in a byte for the number.</p>
  
  <p>My question is, are all integers (positive and negative) stored as two's complement or are only negative numbers in two's complement?</p>
  
  <p>I see that the specs says <code>x bit two's complement number</code>. But I often get confused.</p>
  
  <p>For instance:</p>
  
  <pre><code>  int x = 15; // Stored as binary as is?  00000000 00000000 00000000 00001111?
    int y = -22; // Stored as two complemented value? 11111111 11111111 11111111 11101010
  </code></pre>
  
  <p><strong>Edit</strong></p>
  
  <p>To be clear, <code>x = 15</code> </p>
  
  <pre><code>   In binary as is: `00000000 00000000 00000000 00001111'
    Two's complement: `11111111 11111111 11111111 11110001`
  </code></pre>
  
  <p>So if your answer is  <code>all</code> numbers are stored as two's complement then:</p>
  
  <pre><code>  int x = 15; // 11111111 11111111 11111111 11110001
    int y = -22 // 11111111 11111111 11111111 11101010
  </code></pre>
  
  <p>The confusion here again is the sign says, both are negative numbers. May be I am misreading / misunderstanding it?</p>
  
  <p><strong>Edit</strong>
  Not sure my question is confusing. Forced to isolate the question:</p>
  
  <p><strong>My question precisely: Are positive numbers stored in <code>binary as is</code> while negative numbers are stored as <code>two's complement</code>?</strong></p>
  
  <p>Some said all are stored in two's complement and one answer says only negative numbers are stored as two's complement.</p>