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