c++ - 旋转字节 N 位
问题描述
我正在旋转整数的字节。
我尝试做的第一件事是获取较低的 N 位数和较高的 n 位数。因为在我调用 shift(n) 之后,它会在高端或低端切断这些位,具体取决于它是向左还是向右旋转。
到目前为止,我的工作量很低,它抓住了正确的位。我的高位没有抓住我试图使用 k 和 m 来抓住我的高位的正确位。
在我打电话给我的班次后,我需要将被切断的位重新添加到我从中抓取它的另一侧。
我正在努力获取如何添加这些位以及如何获取高 n 位的逻辑。提示和建议将不胜感激。
NBITS
-> 字节中的位数
Shift(n)
-> 根据 n 是正数还是负数,将 n 位数向左或向右移动
void shift(int n) // If n > 0, shifts bits right n places; if n < 0,left
{
if (n > 0)
bits = bits >> n;
else if (n < 0)
bits = bits << -n;
}
void rotate(int n)
{
int k = NBITS - 1; // last position
int m = (NBITS - 1) - n + 1; // to desired position
int low = bits & ((1 << n) - 1);
int high = (bits & (((1 << (m - k + 1)) - 1) << k)) >> k;
assert(abs(n) <= NBITS);
if (n > 0) { // rotate right n places
shift(n);
//put back cut off bits
}
else if (n < 0) { // rotates left
shift(n);
//put back cut off bits
}
}
解决方案
推荐阅读
- tomcat - 如何为 CLOSE_WAIT 连接配置 Tomcat 超时
- linux - 使用 ubuntu snap 安装后 Flutter SDK 位置出现问题
- c - 用 C 比较文件
- flutter - 为什么我的应用程序没有在一个简单的计数器中通过 ProviderListener?
- javascript - 如果行未满,如何证明内容开始
- vue.js - 在加载图像之前不要更新组件
- wordpress - docker/wordpress:将默认插件与自己的插件分开
- typescript - 打字稿中的可选链接在 webstorm 中对我不起作用
- sql - 在 SQL 查询中选择最近的行
- reactjs - 从反应原生动态生成的组件中获取值/状态