【问题标题】:16 bit barrel shift in JavaJava中的16位桶形移位
【发布时间】:2011-03-01 22:19:58
【问题描述】:

我正在尝试在 Java 中对 int 进行右旋转(桶形移位),例如

Input:  0000 0000 0110 1001
Output: 1000 0000 0011 0100

我知道我可以进行右移 (>>),但是我不知道如何将其结合起来创建旋转(我很确定这是可能的!)。

我认为java.lang.Math 中有一种方法,但我正在研究如何仅使用轮班。

有什么想法吗?

【问题讨论】:

  • @Jason:对……即使是两倍也能创造奇迹!

标签: java int bit-manipulation rotation shift


【解决方案1】:

我不确定是否有单个操作可以解决此问题。但类似:

int x = (x >> 1) | (x << 31)  // or 15 if you really did mean 16-bit

会成功的。

【讨论】:

  • 问题标题是 16bit rotate,我觉得你把进位推得太远了:-)
  • 是的,“16 位”和“int”在问题中并没有真正结合在一起。我已添加评论。
  • 但是你会用
  • 我认为 OP 可能需要 32 位操作,但否则你是绝对正确的。无论是你的技术还是做一个最终的&amp; 0xFFFF 都可以完成这项工作。
  • 我的意思是 16 位,所以我将添加 & 0xFFFF,谢谢您的回答! :)
【解决方案2】:
int rotated_by_one = ((value & 1)<<15) | (value >> 1)

【讨论】:

  • 既然您使用的是&amp;,我敢肯定,无论输入什么,您都可以得到 0!
  • 我不知道你是如何编辑你的帖子而没有显示为编辑的...... :-)
  • 也不知道。也许一个字符的编辑没有被跟踪(编辑下溢?);-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
相关资源
最近更新 更多