C++ 将位转换为值

C++ 将位转换为值,c++,math,mathematical-optimization,bitarray,bit-shift,C++,Math,Mathematical Optimization,Bitarray,Bit Shift,计算机怎么知道(intx,y)x你说你有2位数组,你想为它们创建一个移位运算符?最简单的方法可能是将正确的一个(y)转换为一个整数,然后将x中的每一位移动该量……否则,如果您想一次对其进行1位操作,效率会更低。你会看第一位,如果它是1,移位一次,看第二位,如果它是1,移位两次…我认为你必须把它作为一个整体来处理,这样它才会有效率 假设y不能放入一个整数中…这只是我的想法,但是让我们假设int只有2位,但是y是0b1111。然后,取前2位,将其转换为整数(3),并按该量移位x。然后右移y2(我们

计算机怎么知道(intx,y)
x你说你有2位数组,你想为它们创建一个移位运算符?最简单的方法可能是将正确的一个(
y
)转换为一个整数,然后将
x
中的每一位移动该量……否则,如果您想一次对其进行1位操作,效率会更低。你会看第一位,如果它是1,移位一次,看第二位,如果它是1,移位两次…我认为你必须把它作为一个整体来处理,这样它才会有效率



假设
y
不能放入一个整数中…这只是我的想法,但是让我们假设
int
只有2位,但是
y
0b1111
。然后,取前2位,将其转换为整数(3),并按该量移位
x
。然后右移
y
2(我们int的大小),并将其转换为int。这又是3,您必须重复4次(int max+1),总共12次。也就是说,我们前面做的+3意味着我们移动了
x
15次,这是
y
的值。您可以对更大的数字重复此过程。

首先,在C中,执行大于所讨论类型的位宽度的移位的效果是未定义的-换句话说,如果您有32位整数,
x取决于ALU的内部结构。一些非常丑陋、难以理解和复杂的拨号电路,它可以降低算法的复杂性。同意这听起来像是一个硬件问题,而不是C++问题。如果y是128位的值呢?我知道这有点荒谬,但我的容器可以处理它。只是128位无法转换为值(在任何情况下,如果不使用我的uint128_t库)@calccrypto:请参阅更新。我认为最快的方法是像这样分块重复操作(一次处理尽可能多的位),以利用bdonlan所说的“桶移位”。