關於c++移位問題(有關於<<,>>)..我不太清楚.= =

我看到程式碼時...發現到下面這句話...

int iStartBit = (1<<18)|(1<<20)|(1<<22)|(1<<24)|(1<<28);

之後,又有iStartBit=iStartBit|(1<<9);

還有iStartBit=iStartBit&~(1<<9);

我還是初學者,我自己有想大概是甚麼意思,但是我還是希望可以從中學到清楚的概念..

謝謝幫忙我!!! 這困擾我很久了!!= =

我一直假裝我懂!! 呵呵!!

3 個解答

評分
  • 10 年前
    最佳解答

    簡答說明。

    ----

    1. 二進位模式思考

    目前大多 compiler 裡,不論 unsigned int 或 int 大多給 4 bytes ,也就是有 32 個 bits (實際情況以 sizeof(int) / sizeof(unsigned) 為主 ), 所以實際上它在記憶體的情況是

    0000 0000 0000 0000 0000 0000 0000 0000

    1111 1111 1111 1111 1111 1111 1111 1111

    用 16 進位寫變成 0x00000000~0xffffffff,而 char / unsigned char ,給 1byte ,所以範圍就變 0x00~0xff。你的例子裡面,全部都用二進位模式思考,且最右邊代表第 0 bit,最左邊代表第 31 bit。

    ----

    2. int iStartBit = (1<<18)|(1<<20)|(1<<22)|(1<<24)|(1<<28);

    延續剛剛,這裡 iStartBit 是 32 bits。

    1 << 18,代表 1 這個數值,往左移 18 bits,像是這樣

    0000 0000 0000 0000 0000 0000 0000 0001 ,右移 18 bits 後

    0000 0000 0000 0100 0000 0000 0000 0000 ,從 2^0 變到 2^0 * 2^18

    把 1<<18 , 1<<20, 1<<22 , 1<<24, 1<<28 全都寫下來,再全做 or 動作

      0000 0000 0000 0100 0000 0000 0000 0000 (1<<18) 

      0000 0000 0001 0000 0000 0000 0000 0000 (1<<20)

      0000 0000 0100 0000 0000 0000 0000 0000 (1<<22)

      0001 0000 0000 0000 0000 0000 0000 0000 (1<<28)

    ---- ---- ---- ---- ---- ----

      0001 0000 0101 0100 0000 0000 0000 0000 (iStartBit, OR 結果)

    說穿了,就是把 iStartBit 第 18, 20, 22, 28 個 bit, 設成 1 而已。

    ----

    3. iStartBit=iStartBit|(1<<9);

    這裡講白了,就是把 iStartBit 第 9 個 bit (從 0 開始數) 設成 1 而已,如下

      ???? ???? ???? ???? ???? ??? ? ???? ???? (iStartBit)

      0000 0000 0000 0000 0000 001 0 0000 0000 (1 << 9)

    ---- ---- ---- ---- ---- ---- ----

      ???? ???? ???? ???? ???? ??1 ? ???? ???? (OR 結果)

    原理是, 不論 ? 是 0 或是 1, ? 和 0 做 OR,結果還是維持原本狀態;

    而 (0 或 1) 和 1 做 OR,結果一定是 1,所以上面是把第 9 bit 設 1

    ----

    4. iStartBit=iStartBit&~(1<<9);

    講白了,iStartBit 第 9 bit 設成 0 ,

    一開始先看 1 << 9

    0000 0000 0000 0000 0000 0010 0000 0000 (1 << 9)

    再看 ~(1 << 9)

    1111 1111 1111 1111 1111 1101 1111 1111 ( ~(1<<9) )

    再和 iStartBit 做 AND 運算

      ???? ???? ???? ???? ???? ???? ???? ???? (iStartBit)

      1111 1111 1111 1111 1111 1101 1111 1111 ( ~(1<<9) )

    ---- ---- ---- ---- ---

      ???? ???? ???? ???? ???? ??0? ???? ???? ( AND 結果 )

    原理是, 不論 ? 是 0 或是 1, ? 和 1 做 AND,結果還是維持原本狀態;

    而 (0 或 1) 和 0 做 AND,結果一定是 0,所以上面是把第 9 bit 設 0。

  • 6 年前

    提供企業全程刊登職缺及轉檔,免費客服解說教做,是人資部第一首選,找工作、找人才,提供24H必回覆、獨家工作、自傳急診室、履歷配對、面試教學、職涯測評、TOEIC線上模擬考工作快報、薪資查詢、職場英語…幫求職者快速http://www.jptpex2013.com.tw/

  • 阿風
    Lv 5
    10 年前

    數位邏輯有通嗎

    先簡單說一下

    電腦是二進制的

    1: 0001

    2: 0010

    3: 0011

    4: 0100

    5: 0101

    6: 0110

    7: 0111

    8: 1000

    有沒有發現是如何進位呢? 反之

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