不少**通過位操作,解題很巧妙,學習語言,就要學其精髓,學其底層,不可蜻蜓點水
例一:函式getbits(x,p,n),返回x中從右邊數第p位開始向右數n位的字段
unsigned getbits(unsigned x,int p,int n)
return (x>>(p-n)) & ~(~0<(x>>(p-n))把期望獲得的字段移到字的最右端;~(~0《例二:
函式setbits(x,p,n,y),返回對x執行以下操作後的結果值:將x中從第p位開始的n個(二進位制)位設定為y中最右邊n位的值,x的其餘各位保持不變
unsigned setbits(unsigned x,int p,int n,unsigned y)
return x & ~(~(~0《分析:
設原為:
x: ***...xnnnx...***
y: yyy.............ynnn
若想題意效果,可以:
x變為:***...x000x...***
y變為:000...0nnn0...000
再x和y做位或
x變為需要,可以:
x與111...10001...111做位與
y變為需要,可以:
y先變通過與000............0111做位與,變為000..........0nnn,再左移p-n位
例三:函式invert(x,p,n),返回對x執行以下操作後的結果值:將x中從第p位開始的n個(二進位制)位求反,x的其餘各位保持不變
unsigned invert(unsigned x,int p,int n)
return x ^ ~(~0例四:函式rightrot(x,n),該函式返回對x進行以下操作後的結果值:x右移n次,從最右端移出的位將從最左端再移入
法一:unsigned rightrot(unsigned x,int n)
int widelength(void);
unsigned rbit;
while(n>0)
法二:int bitcount( unsigned x )
//x & (x-1)將x中最右邊值為1的乙個二進位制位清零
C 位操作的應用
test.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std define max achieve data size 256 成就的最大的byte數量 char m achievefinishstate ma...
C語言位操作
在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來 完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功 能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種位運算...
c語言位操作
位運算 and與 有一位為0 運算就為0 想獲取高四位,a a 0xf0 簡寫 a 0xf0 清零 一三五七位清零 a a 0x55 檢測位 檢測第三位 a a 0x04 遮蔽高四位,保留低4 位 a a 0x0f 統計2進製a中1的個數 1 include2 int main 3 11 print...