http://m.gharee.com/wiki/index.php?action=history&feed=atom&title=%E5%B7%A6%E7%A7%BB%E3%80%81%E5%8F%B3%E7%A7%BB 123,123 2025-05-10T03:36:27Z 本wiki的該頁面的版本歷史 MediaWiki 1.21.2 http://m.gharee.com/wiki/index.php?title=%E5%B7%A6%E7%A7%BB%E3%80%81%E5%8F%B3%E7%A7%BB&diff=52&oldid=prev Admin:以“左移運算(<<),右移運算(>>)<br> 描述<br> From The Bitmath Tutorial in The Playground <br> 在C++中有兩個移位運算符:左移運算符<...”為內(nèi)容創(chuàng)建頁面 2014-09-12T05:35:27Z <p>以“左移運算(&lt;&lt;),右移運算(&gt;&gt;)&lt;br&gt; 描述&lt;br&gt; From The Bitmath Tutorial in The Playground &lt;br&gt; 在C++中有兩個移位運算符:左移運算符&lt;...”為內(nèi)容創(chuàng)建頁面</p> <p><b>新頁面</b></p><div>左移運算(&lt;&lt;),右移運算(&gt;&gt;)&lt;br&gt;<br /> <br /> 描述&lt;br&gt;<br /> <br /> From The Bitmath Tutorial in The Playground &lt;br&gt;<br /> <br /> <br /> 在C++中有兩個移位運算符:左移運算符&lt;&lt;和右移運算符&gt;&gt;。這些運算符將使左邊操作數(shù)的每一位左移或右移其右邊指定的位數(shù)。&lt;br&gt;<br /> <br /> <br /> <br /> 語法&lt;br&gt;<br /> &lt;pre style=&quot;color:blue&quot;&gt;<br /> variable &lt;&lt; number_of_bits <br /> <br /> variable &gt;&gt; number_of_bits <br /> <br /> 參數(shù)&lt;br&gt;<br /> <br /> *variable - (byte, int, long) number_of_bits integer &lt;= 32 &lt;br&gt;<br /> <br /> <br /> 示例:&lt;br&gt;<br /> &lt;pre style=&quot;color:green&quot;&gt;<br /> int a = 5; // binary: 0000000000000101<br /> int b = a &lt;&lt; 3; // binary: 0000000000101000, or 40 in decimal<br /> int c = b &gt;&gt; 3; // binary: 0000000000000101, or back to 5 like we started with<br /> &lt;/pre&gt;<br /> <br /> <br /> 當把x左移y位(x &lt;&lt; y),x中最左邊的y位將會丟失。<br /> &lt;pre style=&quot;color:green&quot;&gt;<br /> int a = 5; // binary: 0000000000000101<br /> int b = a &lt;&lt; 14; // binary: 0100000000000000 - 101中的第一個1被丟棄<br /> &lt;/pre&gt;<br /> <br /> 如果您確信沒有值被移出,理解左移位運算符一個簡單的辦法是,把它的左操作數(shù)乘2將提高其冪值。例如,要生成2的乘方,可以使用以下表達式:<br /> &lt;pre style=&quot;color:red&quot;&gt;<br /> 1 &lt;&lt; 0 == 1<br /> 1 &lt;&lt; 1 == 2<br /> 1 &lt;&lt; 2 == 4<br /> 1 &lt;&lt; 3 == 8<br /> ...<br /> 1 &lt;&lt; 8 == 256<br /> 1 &lt;&lt; 9 == 512<br /> 1 &lt;&lt; 10 == 1024<br /> ...<br /> <br /> &lt;/pre&gt;<br /> <br /> 當把x右移y位,x的最高位為1,該行為依賴于x的確切的數(shù)據(jù)類型。如果x的類型是int,最高位為符號位,決定x是不是負數(shù),正如我們在上面已經(jīng)討論過的。在這種情況下,符號位會復(fù)制到較低的位:<br /> &lt;pre style=&quot;color:green&quot;&gt;<br /> int x = -16; // binary: 1111111111110000<br /> int y = x &gt;&gt; 3; // binary: 1111111111111110<br /> &lt;/pre&gt;<br /> <br /> 該行為,被稱為符號擴展,常常不是你所期待的。反而,你可能希望移入左邊的是0。事實上右移規(guī)則對于無符合整型表達式是不同的。所以你可以使用強制類型轉(zhuǎn)換來避免左邊移入1。<br /> &lt;pre style=&quot;color:green&quot;&gt;<br /> int x = -16; // binary: 1111111111110000<br /> int y = (unsigned int)x &gt;&gt; 3; // binary: 0001111111111110<br /> <br /> &lt;/pre&gt;<br /> <br /> 如果你可以很小心地避免符號擴展,你可以使用右移位運算符&gt;&gt;,作為除以2的冪的一種方法。例如<br /> &lt;pre style=&quot;color:green&quot;&gt;<br /> int x = 1000;<br /> int y = x &gt;&gt; 3; // 1000除以8,得y = 125.<br /> &lt;/pre&gt;</div> Admin