Why unsigned int right shift is always filled with '1'
<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>