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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。