^異或:不一樣爲1,相同爲0。能夠記爲:「異」爲不一樣,不一樣爲1.html
signed char 符號位是1時右 移位在左邊補1。如: signed char value=–104;
其二進制表示爲10011000。使用下面的操做把它向右移動兩位: value >>= 2; //Result 11100110測試
//計算絕對值: int abs(int x) { int y; y = x >> 31; //y必定要是int型,右移結果爲0xffffffff或0,若爲unsigned 則右移結果爲1或0 return (x^y)-y; //or:(x+y)^y }
# 傳統的C方式位操做 1.基本操做: 使用一個unsigned int變量來做爲位容器。ui
2.位操做符: |:按位或操做,result = exp1 | exp2;當exp1和exp2中對應位中有一個爲1時,則result中對應位爲1,不然爲0. 應用特色:與0位「或」相應的位不變,與1位「或」設置相應的位爲1. 所以用於:設置某一位爲1,而保證其它的位不變。好比:result |= (1<<12)將設置result的第12位爲1. 也經常使用於:給某個位屬性值附加上另外一個屬性值,好比:result |= exp;這裏至關於給result附加上exp的屬性。.net
&:按位與操做,result = exp1 & exp2;當exp1和exp2中對應的位都爲1時,result中對應的位才爲1. 應用特色:與0位「與」相應的位爲0,與1位「與」相應的位不變。0與1「與」結果爲0,1與1「與」結果爲1,因此也就是說bit & 1 = bit,與1進行「與」操做不改變自己。 所以用於:設置某一位爲0,而保證其它的位不變。好比:result &= ~(1<<12)將設置result的第12爲0. 也經常使用於:得到某個屬性的某一位或某幾位。好比:result & 3 將得到result的最低的兩位。再好比截取一個32位數字的低8位等等。 也經常使用於:測試某個屬性是否等於或包含特定的值。好比:if(result & exp)...unix
^:按位異或操做符,result = exp1 ^ exp1;當exp1和exp2中對應位的值不相同時,result對應的位爲1 應用特色:1)0與1「異或」結果位1,1與1「異或」結果位0,也就是說bit ^ 1 = ~bit,與1「異或」至關於將特定的位取反。 2)1與0「異或」結果位1,0與0「異或」結果位0,也就是說bit ^ 0 = bit,與0「異或」將保持特定的位不變。 所以用於:將某一特定位取反,而保證其它的位不變。好比:result ^= (1<<12)將result的第12位取反。 也經常使用於:將本身清0,好比:result ^= reslut;將使result因此位都變成0.code
~:反轉操做符,將位容器中的因此位都反轉,將1變成0,0變成1。htm
<<:按位左移操做符,exp << n;將容器中的全部位向左移n位,空出的位用0填補。blog
:按位右移操做符,exp >> n;將容器中的全部位向右移n位,空出的位用0填補。get
3.C方式位操做總結: 設置特定的位用|; 清除特定的位用&; 取反特定的位用^; 取反全部的位用~;it