您的位置:首页 > 编程语言 > C语言/C++

神奇的C语言二十一:谈谈位运算

2014-06-12 19:03 274 查看
写C程序时位运算还是很常用的,您肯定也很了解位运算的基本规则。下面是位运算的部分应用。

亦或^:

可以实现位取反,例如:

char a = 0x0F;
a ^= 0xFF;
// 现在,a变成了0xF0

特性:两个相同的数的亦或结果是0。多个数亦或满足交换律。

有道ACM题就是利用了这一点:2*n+1个数,有2*n个数字俩俩相同,只有1个数和其他数都不同,请找出这个数。

利用此特性还可以在不使用辅助变量的情况下交换两个变量的值(不过最好别这么做)。

此特性还可以用于将变量清零,不过这多用于汇编中。

或|:

可以实现将某位置1的操作,例如:

char a = 0xF2;
char mask = 0x04;
// 将第三位置1
a |= mask;
// a现在是0xF6


 与&:

可以实现将某位清0,例如:

char a = 0xF2;
char mask = 0xFD;
a &= mask;
// 现在a是0xF0

测试某位是否为1:,例如:

char a = 0xFF;
char mask = 0x01;
if (a & mask != 0) // 则第一位为1


左移<<:

低位向高位进行移位,高位被移出的位被丢弃,低位移入0。

右移>>:

高位向低位进行移位,高位移入原来的符号位,低位移出的位被丢弃。

位移运算常常被用来做快速的乘2和除2运算,不过要注意的是,他们之间并没有逆运算的关系。除2运算的结果是四舍五入的整数,所以最好只对2的次方数进行右移除2运算。

 


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  位运算