C語言位運算子知識總結和例項分析
位運算應用口訣
清零取反要用與,某位置一可用或
若要取反和交換,輕輕鬆鬆用異或
-
與運算子,&:只有前後兩個運算都為1時,結果才為1.
a: 0011 b: 0010 a&b=0010
-
或運算子,|:有1位為1,結果便為1。
a: 0011 b: 0010 a|b=0011
-
異或運算子,^:不相同則為1.
a: 0011 b: 0010 a^b=0001
-
取反運算子,~:1變0,0變1.
a: 0011 ~a= 1100 b: 0010 ~b= 1101
-
移位運算子,<<, >> : 左移乘2,右移除2,如果超出,則捨棄。
a<<5 移前:0000 1111 = 15 移後:1110 0000 = 224
這裡列舉一些常用的位運算例子。
例一:數字互換
swap(int a,int b)
{
a=a^b;
b=b^a;
a=a^b;
}
例二:求絕對值
abs( int x ) {
int y=x>>31 ;
return(x^y)-y;//也可寫作 (x+y)^y
}
例三: X:2,4,8,16轉化成二進位制是10,100,1000,10000。如果減1則變成01,011,0111,01111。兩者做按位與運算,結果如果為0,則X是2的N次方。
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
n&=n-1;
if(n==0)
printf("YES!");
else
printf("NO!");
}
例三:統計一個整數的二進位制中1的個數。
int CountNumberOfOne(int number)
{
int counter = 0;
while (number)
{
counter++;
number &= number - 1 ;
}
return counter;
}
例四:按位翻轉
x=((x&0xaaaaaaaa)>>1)|((x&0x55555555)<<1);
x=((x&0xcccccccc)>>2)|((x&0x33333333)<<2);
x=((x&0xf0f0f0f0)>>4)|((x&0x0f0f0f0f)<<4);
x=((x&0xff00ff00)>>8)|((x&0x00ff00ff)<<8);
x=((x&0xffff0000)>>16)|((x&0x0000ffff)<<16);
如果無符號32位整數x=311=(100110111)2,那麼經過上述操作後x=3967811584=(11101100100000000000000000000000)2。
例五:列舉恰好含有k個元素的集合
我們假設全集為含有N個元素為 {0,1,2,…,N-1},那麼程式碼段可以寫成:
int s = (1 << k) - 1;
while (!(s & 1 << N)) {
// 由當前集合 s 計算下一個合法的集合
int lo = s & -s; // 求出低位的1
int lz = (s + lo) & ~s; // 求出比lo高的0中,最低位的0
s |= lz; // 將lz代表的元素加入集合s
s &= ~(lz - 1); // 將比lz位置低的元素全部清空
s |= (lz / lo / 2) - 1; // 將集合元素個數補足為k個
}
ox開頭的代表十六進位制,O開頭的代表八進位制,十進位制開頭無符號
十六進位制:
10——a
11——b
12——c
13——d
14——e
15——f
相關文章
- 關於C語言的位運算子C語言
- C語言知識彙總 | 00-C語言知識彙總目錄C語言
- c語言常用小知識點總結1C語言
- C++primer1-7章知識點總結——sizeof運算子C++
- C語言結構聯合位欄位知識體系總結大學霸IT達人C語言
- 例項總結Oracle知識點大全Oracle
- c語言運算子詳解C語言
- c運算子優先順序表-最全c語言運算子優先順序和結合性對照表C語言
- 逍遙自在學C語言 | 位運算子&的高階用法C語言
- 逍遙自在學C語言 | 位運算子的基礎用法C語言
- 逍遙自在學C語言 | 位運算子^的高階用法C語言
- C語言位運算C語言
- C語言學習筆記--C運算子C語言筆記
- C語言運算子優先順序C語言
- c語言-運算子,陣列,指標C語言陣列指標
- C 語言運算子優先順序
- 、【C語言基礎】 第十天 | 知識點總結C語言
- C++基礎知識篇:C++ 運算子C++
- Go語言運算子Go
- Go 語言運算子Go
- c語言字面值知識體系總結大學霸IT達人C語言
- 逍遙自在學C語言 位運算子 "|" 的5種高階用法C語言
- C語言運算子深度解析--超詳細C語言
- c語言基礎知識C語言
- C語言瑣碎知識C語言
- JavaScript in運算子程式碼例項JavaScript
- 鵬哥C語言初識課程總結C語言
- C語言語句知識結構大學霸IT達人C語言
- C# 位運算及例項計算C#
- 07-C語言運算子-指趣學院C語言
- 逍遙自在學C語言 | 邏輯運算子C語言
- 逍遙自在學C語言 | 算數運算子C語言
- 逍遙自在學C語言 | 關係運算子C語言
- C語言知識彙總 | 51-C語言字串指標(指向字串的指標)C語言字串指標
- C語言知識彙總 | 56-C語言NULL空指標以及void指標C語言Null指標
- c語言基礎知識3C語言
- C 語言複雜知識點
- C語言指標基本知識C語言指標