当前位置: 首页 > 知识库问答 >
问题:

位循环移位

赫连彬炳
2023-03-14

我目前正在学习位操作,我的任务是做一个左旋转的4位整数。

我的4位左旋转代码是

private static int BITS_IN_INTEGER = 4;

private static int leftRotate(int x, int n) {
  return (x << n) | (x >> (BITS_IN_INTEGER - n));
}

我想做一个4位循环移位,以保持作为一个4位后旋转,但似乎不能理解它是如何工作的。

例如:10(1010)左旋转1位后给出5(0101),但它给出的值是21,比我的4位多。

任何能让我理解这个问题的帮助都将不胜感激!

共有1个答案

缑桐
2023-03-14

如果我没理解错,你想

  • 使用bits_in_integer许多位而不是32位来模拟整数。
  • 对这样的仿真整数进行旋转

当前,您可以执行一个循环,但实际int的高位(不是模拟int的一部分)可以以0以外的形式结束。示例:

intput x
0000 0000  0000 0000  0000 0000  0000 1100
                                     |____|___, emulated int
result of rotating left by n=2       |    |
0000 0000  0000 0000  0000 0000  0011 0011
  0...0  0011 0011  ←  the result from before
& 0...0  0000 1111  ←  a mask
——————————————————
  0...0  0000 0011  ←  the masked result where unused bits are 0

若要生成形式为0...01...1且具有BITS_IN_INTEGER许多1的掩码,我们可以使用(1< -110000转换为 01111

static int BITS_IN_INTEGER = 4;
static int INTEGER_MASK = (1 << BITS_IN_INTEGER) - 1;

static int leftRotate(int x, int n) {
  return INTEGER_MASK & ((x << n) | (x >>> (BITS_IN_INTEGER - n)));
}

 类似资料:
  • 我必须编写一个函数,对y位置的位进行左循环移位。例如,如果我将:01011000和2作为y,则函数必须返回011000001。 我已经尝试使用但它似乎是无用的。

  • 4、循环移位指令 循环移位指令有:循环左移ROL(Rotate Left)和循环右移ROR(Rotate Right)。 指令的格式:ROL/ROR Reg/Mem, CL/Imm 受影响的标志位:CF和OF 循环左移/右移指令只是移位方向不同,它们移出的位不仅要进入CF,而且还要填补空出的位。具体功能如下图(a)、(b)所示。 (a)、ROL (b)、ROR 下面是几个循环移位的例子及其执行结果

  • 问题内容: 我有使用Java的这种行为: 输出:0 0 16 32 Java移位是循环的吗?如果不是,为什么当b << 30时我得到0,而当b << 32时我得到16? 问题答案: 移位不是循环的;对于s 移位,Java仅使用5个最低有效位,因此等效于(等效于等)。您可以简单地求出移位量,然后除以32的余数。 移位s 也会发生类似的情况,其中Java仅使用6个最低有效位,因此等效于。 JLS的第1

  • 5、带进位的循环移位指令 带进位的循环移位指令有:带进位的循环左移RCL(Rotate Left Through Carry)和带进位的循环右移RCR(Rotate Right)。 指令的格式:RCL/RCR Reg/Mem, CL/Imm 受影响的标志位:CF和OF 带进位的循环左移/右移指令只有移位的方向不同,它们都用原CF的值填补空出的位,移出的位再进入CF。具体功能如下图(a)、(b)所示

  • 问题内容: 我想知道如何实现由位表示的位串的k 循环 右移。 这些代码所做的全部是 返回0 ,如何使其循环移位? 问题答案: 这应该工作: 另请参阅Wikipedia上有关循环移位的文章。

  • 本文向大家介绍python实现整数的二进制循环移位,包括了python实现整数的二进制循环移位的使用技巧和注意事项,需要的朋友参考一下 题目:如何在python中实现整数的二进制循环移位? 概述 在python中,可以通过<<以及>>运算符实现二进制的左移位以及右移位,然而并没有实现循环移位的运算符,暂时也找不到可以实现循环移位的函数,所以在本文中,主要介绍了如何使用字符的切片运算实现循环位移。