【发布时间】:2016-11-29 09:12:09
【问题描述】:
如果我有一个输入,比如 51 (00110011) 和一个表示位索引的索引 i(例如 i = 0 -> 1,i = 2 -> 0),我如何找到像这样的 2 的幂例子。抱歉,我不擅长数学符号,但我可以提供示例输入和输出。
示例:如果给定 51 和索引 1 (00110011),我希望函数返回 00010000 = 16。
此外,如果给定 173 和索引 2 (10101101),则函数必须返回 00001000 = 8。
我正在寻找一种解决方案,它最好根据数字的大小使用位操作并且不使用循环。
编辑:这不是家庭作业。我正在编写一个将用户选择存储为数字的程序。我想在这里挑战自己。
这是我能做的很少的事情
x--;
for (int j = 0; j < 5; j++) {
x |= x >> (int) Math.pow(2, i);
}
x++;
return x;
这需要一个 32 位数字并返回 2 的下一个幂。我不确定这对我的问题是否有用。我尝试查看是否有其他人发布了类似的内容,这就是我发现的内容,并认为它可能会影响我正在尝试做的事情。
编辑 2 我让用户选择一周中的几天并将这些日子存储在一个数字中。给定一天,我想找到用户选择的第二天。我可以通过将数字转换为布尔数组来轻松做到这一点,但我想看看是否还有其他聪明的解决方案。如果它太像“家庭作业”,我深表歉意。
我已经意识到,如果我取一个像 51 (00110011) 和索引 1 这样的数字,我可以通过除以 2^1 = 001100 来减少前两位。然后,我希望程序找到第一个(索引 2)。然后它应该返回 2^(2+2) 因为它削减了 2 位,并且下一个逻辑 1 在那之后的索引 2 处。
【问题讨论】:
-
你的尝试在哪里?这不是家庭作业解决服务。
-
这不是家庭作业。我正在编写一个将用户选择存储为数字的程序。我想在这里挑战自己。
-
那么请发布您解决此挑战的尝试,以便我们帮助您了解错误或遗漏的地方
-
我将发布我工作和发现的一些小东西。我的大部分工作都在我面前的草稿纸上。等等……
-
了解作业与您显示的代码无关。总是显示出来。
标签: java binary bit-manipulation bitwise-operators