阿里笔试题:x&(-x),关于 Lowbit(x)的一点尝试性探究

本文通过阿里笔试题探讨了Lowbit的概念,即`x&(-x)`,用于获取x二进制表示中最低位的1。解释了其原理,通过举例说明如何计算`lowbit(x)`,并总结了`lowbit(x)=2^p`,其中p是x二进制表示中从右往左的第一个1的位置。
摘要由CSDN通过智能技术生成

最近正在看阿里公司的笔试题,有很多算法题和技术题,用来复习也很不错。其中有一题引起了我的注意,题目是这样说的:

答案说是选B。当时我就懵了,废话,选什么我不是懵的。

在经过与同学激情讨论后发现这玩意儿贼有意思!

首先,这个就是个Lowbit,写成这样:

#define lowbit(x) ((x)&(-x)) 

或者是这样:

int Lowbit(x){

    return x & -x ;

}

lowbit(x)的意思是将 x 转化成二进制数之后,只保留最低位的1及其后面的0,截断前面的内容,然后再转成10进制数。

 比如说lowbit(7),7的二进制位是111,lowbit(7) = 1;

又比如6的二进制是110,最低位的1是倒数第二位,所以保留了二进制的10,所以lowbit(6) = 2。以此类推可以得知这题选B

没看懂我们再来说原理:

例子1:设x=1

首先十进制转二进制(设位数为8):

 1 —> 00000001

-1 —> 1111 1111(1的补码)

之后进行下一步操作&#

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值