c語言中移位操作符的試驗

2021-06-17 00:49:10 字數 1780 閱讀 9741

c語言中有兩個移位操作符——左移位「<>".它們可以將乙個值向左移和向右移。在左移位中,值最左邊的被丟棄,而右邊多出來的幾個空位由0補齊。而右移在操作符同樣,只是方向不同。一下例子以左移位操作符講解。

猜想:

1若是移位數為負數怎麼辦,移還是不移?例如a>> -5,看下面**實驗

**1:

#include int main(int argc, char **argv)

執行效果:

它是移了多少位呢?可以算出得到為左移27位。這個值為什麼是這樣的?不是移26或者25位。int是整型,一般大多是32位的,所以可以看出移位數為負數的話那麼真實移位數是32+負數。可以編個**試試對不對;

**2:

[cpp]view plain

copy

"font-size:18px;"

>#include 

intmain(

intargc, 

char

**argv)    

執行效果:

**2中是將1移位27位則剛好和移位-5是相同結果。看官也可以試試別的數字和移位數

2若移位數本身大於運算元所佔位數改如何?編個**試試便知

[cpp]view plain

copy

#include 

intmain(

intargc, 

char

**argv)  

執行效果:

上面**所示將3左移位33位結果是6,為什麼?以下結果為將**改為a<<32,a<<34;

若是在改大些呢?以下為a<<64,a<<65,a<<66的結果

現在結果出來了,左移位的位數=a-32

由上面猜想可以得到移位的公式:實際移位數b=a-32*k;

右移也應該和左移一樣。

注:以上試驗基於gcc4.6.2 編譯器所做。而實際移位數基於運算元的最大位數所得,故系統環境,編譯器不同,實際移位數還是不同。所以基於移位操作符的程式移植難度較大

c語言操作符 位操作符 移位操作符

1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...

C語言中的操作符

包括 需要注意的是,操作符的兩邊都必須為整型 其他的操作符既可用於整型,也可用於浮點型資料,其中 中有乙個資料為浮點型執行浮點型資料運算 包括 左移操作符 和右移操作符 左移操作符的移位規則是 左邊丟棄,右邊補0 整數在記憶體中以二進位制補碼的形式儲存,在左移之後,該數並沒有發生改變 右移操作符的移...

c語言中的操作符

1.除了 操作符之外,其他幾個操作符可以作用於整數和浮點數。2.對於 操作符如果兩個操作符都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。3.操作符的兩個運算元必須是整數。返回的是整除之後的餘數。左移操作符 左邊拋棄,右邊補0,右移操作符 1.邏輯移位 2.算術移位 按位與 按位或 按位...