bit-manipulation - Elixir 中的左旋转按位运算/为什么缺少带符号的左移?

标签 bit-manipulation bitwise-operators elixir

免责声明:我在按位运算方面非常天真,因此不胜感激。

我基本上是尝试在 Elixir 中执行左旋转,基于我正在使用的一些等效的 Java(我需要移植一小块)。

public static long rotateLeft(long l, int shift) {
    return (l << shift) | l >>> (64 - shift);
}

通常我不会直截了本地说明我的工作是什么,但我认为由于使用了 << 而它是相关的。运算符(在 Elixir/Erlang 中似乎不存在)。

是否有一些明显的方法可以在 Elixir 中复制我缺少的上述行为?我已经搜索了没有运算符的实现,但似乎大多数其他语言都有它,所以它没有出现在任何地方。确实出现的一件事是X << Y == X * 2 * Y ,所以我这样实现:

def rotate_left(l, shift) when is_number(l) and is_number(shift) do
    (l * 2 * shift) ||| l >>> (64 - shift)
end

但是,通过两种语言 (rotate_left(2461839666708829781, 13)) 运行测试会在每种语言中提供不同的结果 - 所以我想我犯了一个错误。

如果有人可以提供帮助/解释我在这里遗漏的内容(我假设这个运算符不存在是有原因的),我们将不胜感激。我已尝试涵盖所有内容,以防是由于特定数字等原因造成的,但如果我遗漏了任何重要内容,请告诉我。

还有;如果 Elixir 无法实现,我非常乐意转向 Erlang。提前致谢!

最佳答案

您想使用 the Bitwise module :

iex(1)> use Bitwise
nil
iex(2)> 3 <<< 8 ||| 3 >>> (64 - 8)
768

关于bit-manipulation - Elixir 中的左旋转按位运算/为什么缺少带符号的左移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388148/

相关文章:

session - 当我测试 session 中需要 user_id 的 phoenix Action 时,如何在设置中设置 session ?

c - bit_test() 函数的作用是什么?

java - 获取整数中设置位的位置

algorithm - 证明 XOR 不适用于查找丢失的数字(面试问题)?

python - 数据科学的 Elixir

elixir - 匹配多次出现的字符串 - Elixir Regex

javascript - 反转位 JavaScript

binary - 按位运算符 &、|、^ 可以以 10 为底进行计算吗?

java - 按位或运算的数学方程?

actionscript-3 - 我可以在 Actionscript 3 中使用按位运算将负数变为正数吗?