您的位置:首页 > 其它

奇思妙想位运算

2016-03-15 23:47 176 查看
本篇旨在记录”奇思妙想”的位运算。

1的个数

int c = 10;
int count = (c == 0 ? 0 : 1) ;

while( c = c&(c-1) ){
count++;
}


解析

c-1 会导致c最末尾的1 因为借位变为0,而此前最末尾的1后面必然全是0(或者1为个位),所以当c&(c-1)时,就相当于消去c中最末尾的一个1。 如6的二进制是0110,6-1的二进制是0101。

0的个数

int c = 10;
int count = 0 ;

while( c+1 ){
count++;
c = c | (c+1);
}


解析

x|(x+1)的作用是对一个数中二进制0的个数进行统计.

求余

用位运算求a%b,要求b是2的n次幂,即b必须是1,2,4,8…等等类型的数才可以。

c & (8- 1); //等价于c % 8, 另外8 = 1<<3;


判断奇偶性

奇数二进制最后一位为1 。

(i & 1) == 0 ; //成立表示是偶数


swap功能

交换a和b的值,而不借助第三方变量。

a ^= b;
b ^= a;
a ^= b;


相反数

a = a * (-1);

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