1、置位
置位特定位n:
#define set_nth_bit(x, n) ( x | ((1u)<<(n-1)) )
置位n到m位:
#define set_bit_n_to_m(x,n,m)
(x | (~((~0u)<<(m-n+1)))<<(n-1))
分析:第一步
:( (~0u) <<(m-n+1) ) 執行結果是等到0到(
m-n+1
)位是0
,(m-n+2
)到31位是1
第二步
:(~
((~0u)<<(m-n+1)))將第一步的執行結果按位取反。即0到(
m-n+1
)位是1
,(m-n+2
)到31位是0
第三步
:(~((~0u)<<(m-n+1)))
<<(n-1)
將第二步的32位數向左移動(
n-1)位,等到(
n-1)到(
m-1)位為
1,其餘為0。
第四步
:採用位或,將特定位置為1/
2、復位
復位特定位:#define clear_nth_bit(x, n) ( x & ~((1u)<<(n-1)) )
復位n到m位:
#define clear_bit_n_to_m(x,n,m)
(x & ((~0u)<<(m-n+1))<<(n-1))
3、擷取變數的部分連續位
#define getbits(x, n, m) ( (x & ~(~(0u)<<(m-n+1))<<(n-1)) >> (n-1) )
4 2 6 技術公升級 用巨集定義來完成位運算
4.2.6.1 直接用巨集來置位 復位 最右邊為第1位 define set nth bit x,n x 1u n 1 define clear nth bit x,n x 1u n 1 4.2.6.2 擷取變數的部分連續位。例如 變數0x88,也就是10001000b,若擷取第2 4位,則值為 1...
用巨集交換奇偶位
第一次嘗試 include 在32位系統下 要拿出奇數字則需要 01010101010101010101010101010101 也就是十六進製制的0x55555555 要拿出偶數字則需要 10101010101010101010101010101010 也就是十六進製制的0xaaaaaaaa 最終...
nullnull用巨集定義swap(x,y)
之前一直在查詢nullnull之類的問題,今天正好有機會和大家共享一下.方法1 define swap x,y x x y y x y x x y 方法2 define swap x,y x x y y x y x x y 每日一道理 即使青春是一枝嬌豔的花,但我明白,一枝獨放永遠不是春天,春天該是...