C语言位操作

来源:互联网 发布:万利达t8软件下载 编辑:程序博客网 时间:2024/06/05 18:49

C语言位操作

1 位操作运算符
1.1、与 (&)、或(|)、按位取反(~)
1.2、移位操作:左移(<<)、右移(>>)
2 位操作宏函数
2.1 bit n位置位,即bit n 置1其他位保持不变(从bit 0开始,如 0x01 bit 0为1)

#define SET_NTH_BIT(x,n) (x | (1U << n))

其中,1U 表示无符号整数1,左移n为得到bit n位为1,即掩码,与x按位或即可把x bit n置为1
2.2 bit n 位清零

#define CLEAR_NTH_BIT(x,n) (x & ~(1U << n))

其中,1U 表示无符号整数1,左移n为得到bit n位为1,即掩码,然后按位取反除bit n外所有位为1,与x按位与即可把x bit n清零
2.3 读取bit n位状态

#define GET_NTH_BIT(x,n) (x & (1U << n))

其中,1U 表示无符号整数1,左移n为得到bit n位为1,即掩码,与x按位与即可读取x 中 bit n的状态,因为 1&0 = 0,1&1 = 1,x中bit n位为1相与结果为1,反之为0.
2.4 读取bit n到bit m之间的连续位,其中 m > n

Step 1: 获得(m-n+1)个连续位为0的数,无符号整数左移和右移空缺的位补0,然后按位取反~(0U) << (m-n+1) 其中,~(0U)得到全为1的数,然后<<(m-n+1)位,得到(m-n+1)位为0,其他位为1Step 2: 按位取反得到(m-n+1)个连续位为1的数~(~(0U) << (m-n+1) )Step 3: << n位获得 bit n 到 bit m之间连续位为1的数(~(~(0U) << (m-n+1) ))<< nStep 4: 与某一个数x按位与(&),得到x的bit n 到 bit m之间位x & ((~(~(0U) << (m-n+1) ))<< n)Step 5: 得到x的bit n 到 bit m之间位,然后>>n得到x的bit n 到 bit m之间位对应的数( (x & ((~(~(0U) << (m-n+1) ))<< n))>> n)宏定义函数为:#define GETBITS(x,n,m) ( (x & ((~(~(0U) << (m-n+1) ))<< n))>> n)
0 0
原创粉丝点击