This question already has answers here:
Closed 2 years ago.
Is bit shifting O(1) or O(n)?
(7个答案)
现在,我知道设置一个数的第I位的方法是使用移位运算符移位1,直到达到所需的位,然后用数字或它。
但是这个过程是O(数字的长度),因为把一个数字移到第i个位置就像遍历到第i个位置,对吧?
如果我错了,请纠正我。
这是我的代码:
在O(1)中有这样做的方法吗?
换言之,如何直接访问数字中的位?
我正在考虑数组索引的行。
(7个答案)
现在,我知道设置一个数的第I位的方法是使用移位运算符移位1,直到达到所需的位,然后用数字或它。
但是这个过程是O(数字的长度),因为把一个数字移到第i个位置就像遍历到第i个位置,对吧?
如果我错了,请纠正我。
这是我的代码:
x = x| (1<<i)
在O(1)中有这样做的方法吗?
换言之,如何直接访问数字中的位?
我正在考虑数组索引的行。
最佳答案
通过1
位进行k
移位是在硬件中完成的。在大致简化的级别上,位CPU具有表示在每个方向上移位了0、1、2、…、n-1位的数的寄存器。当一个移位操作被执行时,CPU根据移位的次数加载寄存器n
中的数字,并在下一个周期中读取输出。这使得比特移位成为O(1)操作。
This Q&A有一个图表解释了使用多路复用器的现代cpu的O(1)“魔力”背后的硬件。
关于c - C:在O(1)中将整数的第i位设置为1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42417164/
10-12 01:32