看了两个有趣的小题,有点想法

题:

1,int average(int x, int y) //返回X,Y 的平均值
{
return (x&y)+((x^y)>>1);

2,判断一个整数是不是2的幂boolean power2(int x)
{
return ((x&(x-1))==0)&&(x!=0);
}

想法:

第一个题简单来说就是两个数的和除以2,右移是除以2,位运算是针对每一位来讲,并不进位,x&y只有都是1时为1,在实际运算中就相当于对计算中需进位的数实现了左移,
至于将异或x^y>>1是指把实际运算中没有进位的数进行除以2(就是右移)计算。

第2题比第一题容易理解,2进制数2的幂的形式就是例如00100000,00010000等等,
例如00010000,减一后为00001111,做&运算,自然是==0,依此类推,自然就可以找到为2的幂的数了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值