C 移位操作符的使用

2021-09-22 02:47:45 字數 1295 閱讀 4419

c++中的移位操作符有兩個,分別是向左移位"<<「和向右移位」>>",移位操作符屬於雙目運算子,包括目標物件和移位次數,例如(1 << 4),則表示將1這個資料物件向左移位8個bit,如果1是乙個int8_t型別的資料,那麼從二進位制的表示來看,00000001 經過移位後變成了00010000,對應的十進位制的值就是16.所以呢,向左移動n個位相當於乘以2^n。同樣的道理,向右移動n個位就相當於乘以2 ^ (-n)。

移位操作符可以用在標準資料型別資料存放在陣列當中,一些應用的場景是我們需要將標準資料型別的資料存放在陣列型別的變數當中。例如將乙個int32_t型別的變數中的資料存放到乙個 int8_t 型別的陣列當中,要求先儲存低位再儲存高位。我們就可以按照如下**行中所示的方式去實現。

int32_t intdata = 32896; // 二進位制 值00000000 00000000 10000000 10000000

int8_t buff[4] =;

buff[0] = (int8_t)(intdata); //存放從低到高第乙個位元組

buff[1] = (int8_t)(intdata >> 8); //存放從低到高第二個位元組

buff[2] = (int8_t)(intdata >> 16); //存放從低到高第三個位元組

buff[4] = (int8_t)(intdata >> 24); //存放從低到高第四個位元組

for(int32_t i = 0 ; i < 4; i++)

int32_t intdata1 = 0 ; //用來存放將buff中的資料還原為乙個int32_t的資料

intdata1 = (int32_t)(buff[0]) + ((int32_t)(buff[1]) << 8) + ((int32_t)(buff[2]) << 16) + ((int32_t)(buff[3]) << 24);

cout << intdata1<< endl;

再就是一些應用中需要對乙個資料的某乙個位進行操作,我們也可以通過移位運算子來操作,比如有這樣的乙個應用場景:乙個int32_t 的資料型別的變數的每一位代表乙個標誌位,如果是0則代表這個標誌位對應的狀態時false,如果是1則代表這個標誌位對應的狀態為true。見如下**

int16_t intflag = 65280 ; //對應二進位制的值為 11111111 00000000

for(int32_t i = 0 ; i < 16; i ++)

{ if(intflag & (1 << i))

{cout << i <<" = "<<"ture"《我們可以看到,在這些操作中需要操作符「| &」的配合。

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

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

移位操作符

移位操作符 位移位運算子是將資料看成二進位制數,對其進行向左或向右移動若干位的運算。位移位運算子分為左移和右移兩種,均為雙目運算子。第一運算物件是移位物件,第二個運算物件是所移的二進位制位數。位移位運算子的運算物件 運算規則與結果 結合性如表2 16所示。移位時,移出的位數全部丟棄,移出的空位補入的...

移位操作符

左移 在左移位中,值最左邊的幾位被丟棄,右邊多出來的幾個空格則由 0 補齊。如上圖。右移 右移位操作存在乙個左移位操作不曾面臨的問題,從左邊移入新位時,可以選擇兩種方案。一種是邏輯移位,左邊移入位用 0 填充 另一種是算數移位,左邊移入的位由原來的符號位決定,符號位為 1 則移入的位均為 1 符號位...