c語言移位詳解

2021-08-28 14:36:52 字數 512 閱讀 7058

實驗平台 vs2017

左移位和右移位有區別.

左移位比較簡單,就是直接在低位後面補0;

右移位則比較複雜,

假設有10000000的二進位制數,往右移動一位,則數變為11000000,原因在於補的高位是原來的第一位,

也就是說如果是01000000,則往右移動一位,變為00100000.

需要注意的是也有乙個特殊的情況,這是最令人困惑的

考慮以下兩條語句

char a=0x80   //10000000

char b=a<<1>>1;//將a左移一位,再右移一位,賦值給b;

按道理,先左移一位變為00000000,再右移一位應該是00000000

但實際上,b會是10000000

但是還是下面的三條語句,情況就會有不同,

char a=0x80

char b=a<<1;

b=b>>1;

這個時候b就會是我們預料的00000000.

以上就是所有我們需要注意的事項

C語言移位知識小結

關於c語言移位功能的知識小結如下 1,進行2的n次方計算,使用移位效率會提公升很多 2,移位有時候會導致資料丟失,但有時候這正是我們要的功能 3,右移位操作是不可移植的 4,移位的操作符好是負數的時候,行為不確定。關於第4點進行一點簡單的驗證,寫 如下 include stdio.h int mai...

c語言的移位操作

左移時總是移位和補零。右移時無符號數是移位和補零,此時稱為邏輯右移 而有符號數大多數情況下是移位和補最左邊的位 也就是補最高有效位 移幾位就補幾位,此時稱為算術右移。include using namespace std void main buf 1 temp 0x00ff temp temp 8...

C語言中移位操作

先要了解一下c語言裡所有的位運算都是指二進位制數的位運算。即使輸入的是十進位制的數,在記憶體中也是儲存為二進位制形式。用法 格式是 a 0。功能 將整型數a按二進位制位向左移動m位,高位移出後,低位補0。用法 格式是 a m,a和m必須是整型表示式,要求m 0。功能 將整型數a按二進位制位向右移動m...