C++ 一些小功能的快速实现

本文介绍了使用C++通过位操作和数组技巧来解决一系列问题,包括计算二进制数中1的个数、判断2的幂、无加减乘除做加法、无判断语句找最大数、无中间变量交换数值,以及寻找数组中出现次数超过一半和只出现一次的数字。提供了一种通用思路,通过将数组元素视为二进制数,对每一位进行相加,以找到特定条件下的数字。
摘要由CSDN通过智能技术生成
  1. 求一个二进制数中 1 的个数
class Soulution{
   
public:
	int hammingWeight(uint32_t n) {
   
		int ans = 0;
		unsigned int flag = 1;
		while(flag){
   
			if(flag & n)
				ans++;
			flag <<= 1;
		}
		return ans;
	}
}
  1. 判断一个数是不是 2 的幂,不可用循环语句
/* 
这样的数转换为二进制是 10、100、1000。
如果 x 减 1 后与 x 做与运算,答案若是 0,
则 x 是 2 的 N 次方。
*/
 
!(x & (x-1))

不用加减乘除做加法

    int add(int a, int b) {
   
        
        while(b!=0){
   
            int tmp=a^b;
            b=((unsigned int)(a&b)<<1);
            a=tmp;
        }
        return a;
    }
  1. 找出两个术中最大的那个,不用判断语句
int nmax = ((a+b) - abs(a-b))/2;
  1. 不用任何中间变量,将 a, b 交换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值