bit-shift - Perl 6是否等效于Java的>>和>>>运算符?

标签 bit-shift raku

我已经开始使用Perl 6,目前正在移植Java项目中的一些代码,它们使用Java的shift运算符<<>>以及>>>运算符。

目前,我正在使用+> \ +<(和~>)运算符对此进行补偿,但是它们等效吗?

最佳答案

这完全取决于您放在运算符左侧的内容。由于Perl 6在默认情况下可在bigints上运行(aka,整数值的大小会不断增长,直到您用尽内存或厌倦了等待),这实际上取决于您右移时是负值还是正值。

say  2**65 +> 63; #  4
say -2**65 +> 63; # -4

因此,您可以向左移动任意距离:
say  1 +< 65; #  36893488147419103232
say -1 +< 65; # -36893488147419103232

现在,如果您想将自己限制为通常为64位的 native 整数,则可以进行换行:
my int $i = 1;         say $i +< 65; # 2
my int $i = 1;         say $i +< 63; # -9223372036854775808
my int $i = 2**63 - 1; say $i +> 62; # 1

有人可能会争辩说,这些相当于Java中的<<>>。而且,Perl 6没有Java的>>>的代码(无论如何)。

另外,尽管指定了~>运算符,但目前尚未实现。欢迎补丁!

关于bit-shift - Perl 6是否等效于Java的>>和>>>运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51346634/

相关文章:

c++ - 为什么 long int 数据类型的左位移 << 不超过 31?

c - 左操作数为负时的未定义行为

c - 负数右移

raku - 有没有办法从 Perl6 模块代码中的 META6.json 获取版本?

raku - 如何将类属性声明为类名的联合?

java - 如何打包和解包给定特定格式的长变量?

java - 具有移位和运算符的唯一字符 : don't understand this code

raku:用于解析部分的 Markdown 语法

io - 你如何附加到 Perl 6 中的文件?

raku - 如果路径包含非拉丁字符,则出错