C語言位操作的神應用(位操作)

2021-07-16 09:48:14 字數 1084 閱讀 9853

不少**通過位操作,解題很巧妙,學習語言,就要學其精髓,學其底層,不可蜻蜓點水

例一:函式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...