我目前正在学习位操作,我的任务是做一个左旋转的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位多。
任何能让我理解这个问题的帮助都将不胜感激!
如果我没理解错,你想
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<
-1
将
10000
转换为
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中,可以通过<<以及>>运算符实现二进制的左移位以及右移位,然而并没有实现循环移位的运算符,暂时也找不到可以实现循环移位的函数,所以在本文中,主要介绍了如何使用字符的切片运算实现循环位移。