表示位在数组中表示的旋转
Expressing rotation where bits are represented in array
我有一系列位,由指针表示。
Bit* bits[32];
现在我需要实现二进制右旋转运算符。我知道第一部分是相同数量的右移,它处理所有没有环绕的部分,但我不确定如何处理那些环绕的位。
如何确定哪些位最终位于最终结果中的哪些位置?
到目前为止,我有
ExpressionHolder rotate(unsigned int other) const {
ExpressionHolder out;
out.e = new Expression;
for(int i = 0; i < (32 - other); i++) {
out.e->bits[i] = e->bits[i + other];
}
for(int i = (32 - other); i < 32; i++) {
out.e->bits[i] = e->bits[31 - i];
}
return out;
}
这是对的吗?
std::rotate_copy
应该可以解决问题
ExpressionHolder rotate( ExpressionHolder const& in, std::size_t count )
{
ExpressionHolder out;
out.e = new Expression();
std::rotate_copy( in.e->bit, in.e->bit + 32 - count, in.e->bit + 32, out.e->bit );
return out;
}
量子力学规定比特总是处于 1 和 0 的叠加态。因此,在我们查看 *e.bits[i] 之前,我们永远无法确定指针的实际位值。
但是在我们看一个直截了当之后
for(int i = 0; i < 32; i++)
out.e->bits[i] = e->bits[(i + other) %32];
应该做这个伎俩。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 与互斥锁相比,旋转锁可以保证上下文切换
- 如何将ampl中的集合表示为c++中的向量
- std::is_base_of表示ctor编译错误
- 输入中的字符串数未知(以字母表示)
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 绘制旋转的三角形
- c++模板来表示多项式
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- 询问在设计我的手臂模拟器功能表示格式1
- CMakeLists.txt中的命名空间表示法
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 如何计算Big-O表示法中的平均渐近运行时间
- 发布旋转矩阵(openGL/glm)
- 我应该如何表示我拥有的连续元素序列?
- 当表示为对象的一维向量时,有效地旋转 NxM 矩阵 (C++)
- 将网格与VTK相机对齐(相机的视觉表示,随之移动和旋转的网格)
- 表示位在数组中表示的旋转