請問關於C++的<<=和>>=所代表的意義~XD

前兩天有人問到<<=和>>=所代表的意義~但是我不太了解~XD

我寫了下面的程式,測試出來結果表面上看起來是指數關係,但是輸入某些特定的數字,卻又不是呈現指數關係。

我很疑惑,想要了解一下關於這兩個東西的詳細內容,意義及使用方式等等的,請詳細告知,謝謝~XD

#include <iostream>

using namespace std;

int main()

{

int a=0,c=0;

for(int i=0;i<5;i++){

cin>>a;

c=a;

cout<<endl<<c<<endl;

c=2;

c>>=a;

cout<<endl<<c<<endl;

c=2;

c<<=a;

cout<<endl<<c<<endl;

system("pause");

}

return 0;

}

已更新項目:

了解了,這樣疑惑就大致解除了,跟我所推算的大致相同,果然是以2進位做左右推移呀~XD

所以輸入值32就等於繞了一圈回到0的結果,但是還是有個小小的疑問...還麻煩解答一下~XD

就是輸入值若為負值的時候,又會呈現怎樣的規則呢?

因為昨天測試的時候,在輸入為負數時,似乎出現許多令人不解的地方

2 個已更新項目:

我的問題是,c值不變,而a值是負值的時候,應該會有什麼樣的規則呢?因為反覆測試數次,找不到關鍵的規則。

例如:

2 >> -1

2 >> -10

2 << -1

2 << -10

麻煩了,謝謝~XD

3 個已更新項目:

是否是因為二進位負數表示的問題?或者是資料型態宣告的問題呢?

4 個已更新項目:

想想若是a是負值,似乎也沒什麼意義,與其要輸入負值,不如利用<<和>>的相反關係就好了,我沒問題了,感謝回答~XD

2 個解答

評分
  • Lv 7
    1 0 年前
    最佳解答

    <<和>>在C++裡是所謂的logical運算元. a << b是把a裡的值向左邊移b個bit. a >> b是把a裡的值向右邊移b個bit. 比如說

    a = 10; //a裡的值用二進位的方式來代表的話會是1010.每一個數字代表一個bit.

    a << 3; // a裡的值向左移3個bit.表示 1010變成1010000.所以a的值從10變成80

    a >> 2; // a裡的值向右移2個bit.表示 1010變成10. 所以a的值從10變成2

    如果你仔細觀察的話.不難發現. a << 3其實是a * 23. 而a >> 2其實是a / 22.

    也就是說a << b等於a * 2b.而a >> b等於a / 2b. 自己寫個程式試試.

    P.S.如果你在寫程式時要乘或除以2個次方的話.用<<和>>比較好.因<<和>>的執行速度比*和/來的快多了.

    那<<=和>>=是做啥用的?

    記不記得C++裡有+=和-=等等相似的運算元?也就是說一個運算元旁邊再加上一個=號變成一個新的運算元.

    a += b其實是a = a + b的縮寫

    a -= b其實是a = a - b的縮寫

    等等...

    那以此類推.

    a <<= b其實是?

    a >>= b其實是?

    懂不懂?不懂請再問

    2007-07-17 22:41:04 補充:

    要記得.不管是正數還是負數.對電腦來說都是0和1.

    例.

    -1 = 0xFFFFFFFF = 11111111111111111111111111111111

    -10 = 0xFFFFFFF6 = 11111111111111111111111111110110

    2007-07-17 22:41:13 補充:

    所以在算<<或是>>的時後要先把數字轉換成2進位之後再做移位.

    例:

    (-10 >> 1) = 11111111111111111111111111110110 >> 1 = 11111111111111111111111111111011 = -5

    (-10 >> 4) = 11111111111111111111111111110110 >> 4 = 11111111111111111111111111111111 = -1

    2007-07-17 22:41:52 補充:

    還有幾點要記得的就是

    1. 在做<<時.一定都是用0補位.也就是說在向左移位完之後.右邊的空位會是0.

    2. 在做>>時.如果移位之前,最左一位是1的話.那就用1補位.最左一位是0的話.那就用0補位.這就是所為的"sign extend"

    3. 0 >> X, X為任何正整數, 都一定是0. (不信自己試試)

    4. -1 >> X, X為任何正整數, 都一定是-1. (不信自己試試)

    懂不懂?不懂請再問

    參考資料: Myself, Myself
  • Wow
    Lv 6
    1 0 年前

    c<<=a -> 將 c 向左移動 a 個位元, 然後存放在 c

    c>>=a -> 將 c 向右移動 a 個位元, 然後存放在 c

還有問題?馬上發問,尋求解答。