<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    C語言的左位移能不能超過8位?

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
    C語言的左位移能不能超過8位?比如b=a<<20; 這樣可以不?如果可以,一個字節只有8個位,左移20位是不是連右邊其它字節的12個位(20-8)也一起左移?

    字符變量左移八次后,所有的位都移出去了,繼續左移當然可以,但沒有意義,因為左移八次后八個位都是0,再移沒有意義
    追答:
    他左邊的字節不受影響
    追問:
    int變量a(32個二進制位)左移25位的話,它是32個二進制位一起左移還是每8個二進制位單獨左移25位?
     
    比如a<<=25  它是以全部32個位為整體一起左移25位嗎?也就是32位移出去25位?
     
    還是這32位分成四個字節,然后以字節為單位,每個字節分別左移25位?
    追答:
    移位是針對所有二進制位的,不是一個字節。a<<=25 每移動一次,32個位都跟著一起向左移一位。
    追問:
    你說的char變量左移8位后就全都移出去了,再移就沒有意義了因為八個位都是0
     
    但我試過了好像不是這樣
     
    比如char ch=1; printf("%d",ch<<8);結果卻輸出256
     
    printf("%d",ch<<25);結果就輸出33554432
     
    按道理char變量ch左移7位應該就是-128,再移下去就全變成0了,但實際結果卻是移七位的時候還沒有變成-128,而是128,再移下去不但沒有變成0,反而輸出結果更大。。 不知道為什么會這樣
    追答:
    其實你問的是另一個問題了
     
    你以%d格式輸出就不是原來的類型了
    追問:
    已經定義了char ch,就相當于定義給他分配一個字節,至于%d和%c只是把存在內存中的那串二進制以不同形式輸出而已,
     
    一個char ch最大數就是01111111
     
    按道理左移八位就全部都移出去了,但實際結果不是這樣
    追答:
    你寫成ch<<8或ch<<25,輸出的是表達式的值,而不是變量的值,在<<后面加上=看看,結果是不同的,這時輸出的是變量的值
    追問:
    哦,明白了,ch<<25并不是賦值給ch
     
    謝謝你了
    收起
    提問者評價
    太給力了,你的回答完美地解決了我的問題,非常感謝!
    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全