【发布时间】:2017-02-23 13:30:05
【问题描述】:
现在,我知道设置数字的第 i 位的方法是使用移位运算符将 1 移到所需的位,然后将其与数字直接或。 但是这个过程是 O(数字长度),因为将数字移动到第 i 个位置就像遍历直到那里,对吧? 如果我错了,请纠正我。
这是我的代码:
x = x| (1<<i)
有没有办法在 O(1) 中做到这一点? 换句话说,如何直接访问数字中的位? 我正在考虑数组索引。
【问题讨论】:
-
我认为你错了。这个操作是 O(1)。
-
这取决于您的硬件,即 CPU。显示您的代码和相关机器码。但是您可以使用查找表来确保安全(但可能更慢)。
-
n |= 1 << i,像这样吗? -
位移是 O(1),就像加法是 O(1)。将 n 添加到 m 时,您不必增加 m n 次。位移也是如此。
-
明确的答案本质上是错误的,因为这一切都取决于您对基本操作的定义。当然,可变数量的位移通常被认为是基本的,但它始终是您做出的选择,即使您隐含地这样做。
标签: c bit-manipulation time-complexity bitwise-operators bit