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

2021-08-09 07:43:39 字數 1901 閱讀 7764

1、按位操作符

1.1 按位「與」&(雙目運算子):

僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。

例:9&5=1

0000 1001-------------   9的補碼

&  0000 0101-------------    5的補碼

----------

0000 0001-------------    1的補碼

應用:a、通常將某些位清零或保留某些位。

例如:將a的高八位清零,保留低八位,可做a&255運算。

00000000 11111111—————— 255的二進位制數

00000000 00100000—————— a的二進位制數

------------------

00000000 11111111

b、取某數的指定位。例如:設a=1000 1110,要取出a中第二位的1,則可以用 

a & 0000 0010 實現。

1.2 按位「或」|(雙目運算子):

僅當兩個運算元都為0時,結果為0,否則為1。

例:9|5=13

0000 1001------------- 9的補碼

|  0000 0101------------- 5的補碼

----------

0000 1101------------- 13的補碼

應用:常用來將源運算元某些位置1。例如:設a=0100 0001,將低四位全部置1,則可以用 a | 0000 1111 實現。

1.3 按位「異或」^(雙目運算子):參加運算的兩數各對應的二進位相異或,當對應的二進位相異時,結果為1.

例: 9^5=12

0000 1001------------- 9的補碼

^  0000 0101------------- 5的補碼

----------

0000 1101------------- 12的補碼

應用:

a、特定位置取反。例如:設a=1001,將第2位取反,則可以用 a ^1011 實現。

b、不引入第三變數,交換兩個數的值。

例:a=1,b=2,交換兩個數的值

a=a^b;                 

b=a^b;              

a=a^b;                

001                011           011

^ 010            ^   010        ^  001

————           ————      ————

011                001           010

2、移位操作符

2.1 左移運算 <<(丟棄最高位,0補最低位):把乙個數的所有位都向左移動若干位。

例如:int i=1;i=i<<2;    //這表示將i裡的值左移兩位。

分析:1的2進製是000...0001(這裡1前面0的個數和int的位數有關,32位機器,gcc裡有31個0),左移2位之後變成000... 0100,也就是10進製的4,所以說左移1位相當於乘以2,那麼左移n位就是乘以2的n次方了(注:有符號數不完全適用)

2.2  右移運算   >>:把乙個數的所有位都向右移動若干位。

例如:int i = 0x80000000;

i = i >> 1;  //i的值不會變成0x40000000,而會變成0xc0000000

分析:符號位向右移動後,正數的話補0,負數補1,也就是組合語言中的算術右移。同樣當移動的位數超過型別的長度時,會取餘數,然後移動餘數個位。

總之,在c中,左移是邏輯/算術左移(兩者完全相同),右移是算術右移,會保持符號位不變.實際應用中可以根據情況用左/右移做快速的乘/除運算,這樣會比迴圈效率高很多.

Java移位操作符以及按位操作符

按位操作符 針對兩個整數引數中的對應位執行布林代數運算,並生成乙個結果。按位與 如果兩個輸入位都是1則生成乙個輸出位1,否則生成乙個輸出位0。按位或 如果兩個輸入位只要有一位是1則生成乙個輸出位1.否則生成乙個輸出位為0。按位異或 如果兩個輸入位只有其中一位是1那麼生成輸出位1,否則生成乙個輸出位為...

移位操作符

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

移位操作符

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