首页 > 编程语言 > 详细

C语言高效位操作

时间:2016-01-15 06:20:24      阅读:217      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!