发布网友 发布时间:2023-06-25 21:45
共1个回答
热心网友 时间:2024-12-12 21:39
最近正在看阿里公司的笔试题,有很多算法题和技术题,用来复习也很不错。其中有一题引起了我的注意,题目是这样说的:
答案说是选B。当时我就懵了,废话,选什么我不是懵的。
在经过与同学*讨论后发现这玩意儿贼有意思!
或者是这样:
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&(-1) = 1。
例子2: 设x = 6
首先十进制转二进制(设位数为8):
6 —> 0000 0110
-6 —> 1111 1010(6的补码)
之后进行下一步操作,取&:
比如1的二进制写作0000001,1处于第0位,所以p=0, 2^0=1, 所以lowbit(1)=1;
比如6的二进制写作0000110,1处于第1位,所以p=1, 2^1=2, 所以lowbit(6)=2。
所以针对本题目,2^31-3化为二进制后最后四位为:1101。所以p=0, 20=1,所以lowbit(231-3)=1。
所以这题选B。