首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用增量和多值2生成任意数字

使用增量和多值2生成任意数字
EN

Stack Overflow用户
提问于 2015-01-13 23:43:41
回答 2查看 64关注 0票数 0

我正在寻找在循环中工作的算法,它将生成任意自然数n,只使用2好的增量和乘法,平凡的方式是已知的(增量数n倍),但是我正在寻找更快的方法。老实说我甚至不知道该怎么开始这件事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-13 23:53:17

基本上,你想要做的是从右边移动数字的位数,从MSB开始。

例如,如果您的数字为70,则其二进制数为0b1000110。因此,您希望“在”位中“移动”1、0、0、0、1、1、0。

要在零中移动,只需将数字加倍。要移动一个数字,你要加倍,然后增加它。

代码语言:javascript
复制
if (bit_to_be_shifted_in != 0)
    x = (x * 2) + 1;
else
    x = x * 2;

因此,如果给您一个从MSB到LSB (即从左到右)的位数组,则C代码如下所示:

代码语言:javascript
复制
x = 0;
for (i = 0; i < number_of_bits; i++)
{
    if (bits[i] != 0)
        x = x * 2 + 1;
    else
        x = x * 2;
}
票数 3
EN

Stack Overflow用户

发布于 2015-01-14 03:14:09

这样做的一种方法是倒退。如果是奇数,减去一个。如果是偶数,除以2。

代码语言:javascript
复制
while(n > 0) {
   n & 1 ? n &= ~1 : n >>= 1;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27933580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档