选择十进制数的所有二进制邻居

use*_*076 3 binary r decimal

假设我有十进制格式的数字: 5

它的二进制版本是: 00101

我想写一个带十进制数的函数 x

并返回与原始数字差异(以二进制形式)的所有其他十进制数字:

所以对于上面的例子,邻居是:

10101 01101 00111 00001 00100
Run Code Online (Sandbox Code Playgroud)

相应的小数是:

21 13 7 1 4
Run Code Online (Sandbox Code Playgroud)

我想要一个计算效率高的解决方案,即使我说了一百万个数字也不需要很长时间.

这可能吗?

ale*_*laz 10

我不知道试验和错误是如何让我在这里,但它看起来有效,除非我搞砸了二进制和小数:

bin_neighs = function(x, n) bitwXor(x, (2 ^ (0:(n - 1))))
bin_neighs(5, 5)
#[1]  4  7  1 13 21
Run Code Online (Sandbox Code Playgroud)

  • 优秀的简单方案!它更快,更快.我的机器上的Microbenchmark显示您的方法的中位数时间为7.6微秒,josilber的中值时间为392,我的中位数为664.我唯一要做的就是从`ff`更改名称以避免与同名包混淆,并出于样式原因将`=`更改为`<-`. (2认同)