C語言的左位移能不能超過8位?
睿豐德科技 專注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
謝謝你了收起
- 提問者評價
-
太給力了,你的回答完美地解決了我的問題,非常感謝!