常用小功能总结

1,求一个数转化成二进制后包含1的个数

1 int func(int x){
2     int count=0;
3     while(x){
4         count++;
5         x=x&(x-1);
6     }
7     return count;
8 }

 2,判断一个数是不是 2 的 N 次方(2,4,8,16...),不可用循环语句。

1 /* 这样的数转换为二进制是 10、100、1000。如果 x 减 1 后与 x 做与运算,答案若是 0 ,则 x 是 2 的 N 次方。*/
2 
3 
4 !(x & (x-1))

 3, 找出两个数字中的最大值。不用判断语句。

1 int max = ((a+b)+abs(a-b)) / 2;

4, 不用任何中间变量,将 a,b 的值进行交换。

 1 // 方法1:异或运算(不用担心超界问题)
 2 
 3 
 4 a = a ^ b;
 5 b = a ^ b;
 6 a = a ^ b;
 7 
 8 // 方法2:加法运算
 9 
10 a = a + b;
11 b = a - b;
12 a = a - b;

 

posted on 2019-01-24 14:39  爱笑的张飞  阅读(119)  评论(0编辑  收藏  举报

导航