c位操作


原文链接: c位操作

bitops.h

位运算技巧

记得iOS总有一道面试题在不使用第三个变量的情况下交换两个变量的值,这里用到异或的上面加解密中的特性。我有x、y两个个变量,做如下位运算操作

void exchange(int x , int y) 
{ 
    x ^= y; 
    y ^= x; 
    x ^= y; 
} 

判断一个数的奇偶性,其实我们可以用%2来判断,代码量不高,但是之前讲过,除法运算的时钟周期非常多,所以代码虽然不多并不代表效率高,我们可以用如下运算来完成:

void test(int x)
{

if (x&1) {
    printf("奇数");
} else {
    printf("偶数");
}

}
复制代码原理很简单,因为二进制是满二进一,一旦超过1就会变0并进一位,这时候和00001做&操作一定会为0,反之不为零。这样写效率会更高。

计算两个数的平均值,通常我们都是(x+y)/2,先不考虑效率问题,这样还会引起一个其他的问题,那就是x+y的值很有可能溢出大于INT_MAX,所以我们采用位运算的办法来解决即可:

int average(int x, int y)
{

return (x&y)+((x^y)>>1); 

}

作者:茉莉儿
链接:https://juejin.im/post/5a5886bef265da3e38496fd5
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

`