码迷,mamicode.com
首页 > 编程语言 > 详细

C语言高效位操作

时间:2016-01-15 06:20:56      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

思考:

1、 如何将一个数据中的多个不连续位清位?

1、 如何将一个数据中的多个不连续位置位?

1、 如何反转一个数据中的多个不连续位(1->0, 0->1)?

基础知识:C 语言位操作

按位或(有1得1): | 按位与(有0得0): & 按位异或(不同得1): ^ 按位取反: ~
0 | 0 = 0 0 & 0 = 0 0 ^ 0 = 0  ~0 = 1
0 | 1 = 1 0 & 1 = 0 0 ^ 1 = 1  ~1 = 0
1 | 0 = 1 1 & 0 = 0 1 ^ 0 = 1  
1 | 1 = 1 1  & 1 = 1 1 ^ 1 = 0  

清位(将某一位置为0):用 0 与 该位进行 与& 运算即可清位--> x & 0 = 0;

置位(将某一位置为1):用1 与 该位进行 或 | 运算即可置位 --> x | 1 = 1;

取反 (将某一位求反): 用 1 与 该位进行 异或 ^ 运算即可取反 --> X ^ 1 = ~X;

 

例如:

int var = 0xFFEC2468;

1 、将var中的第3、 15、 16、 22位清位.

var &= ~( (0x1 << 2)  | (0x1 << 14)  | (0x1 << 15) | (0x1 << 21) );

2、 将var中的第1、14 、 17、 28位置位.

var |= ( (0x1 | (0x1 << 13) | (0x1 << 16) | (0x1 << 27) );

3、 将var中的第2、 9、 11、 29位取反。

任何位与1进行异或可取反, 任何位与0进行异或则可保持不变。

var ^= ( (0x1 << 1) | (0x1 << 8) | (0x1 << 10) | (0x1 << 28) );

 

C语言高效位操作

标签:

原文地址:http://www.cnblogs.com/tid-think/p/5132145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!