title: Why unsigned int right shift is always filled with '1'
body: <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;bitset&gt;
  
  int main()
  {
      char c = 128;
      unsigned int shift2 = (unsigned int)c;
      std::string shift2bin = std::bitset&lt;8&gt;(shift2).to_string(); //to binary
      std::cout &lt;&lt; " shift2bin: " &lt;&lt; shift2bin &lt;&lt; std::endl;
  
      unsigned int shift3 = shift2 &gt;&gt; 1;
      std::string shift3bin = std::bitset&lt;8&gt;(shift3).to_string(); //to binary
      std::cout &lt;&lt; " shift3bin: " &lt;&lt; shift3bin &lt;&lt; std::endl;
  
  }
  </code></pre>
  
  <p>Output:</p>
  
  <pre><code> shift2bin: 10000000
   shift3bin: 11000000
  </code></pre>
  
  <p>I expect the result to be as follows:</p>
  
  <pre><code> shift2bin: 10000000
   shift3bin: 01000000
  </code></pre>
  
  <p>Question> Why unsigned int right shift uses 1 as the filler?</p>