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

时间:2018-07-15 08:25:40

标签: bit-shift perl6

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

当前我正在使用>>>(和+> \ +<)运算符来弥补这一点,但是它们等效吗?

1 个答案:

答案 0 :(得分:10)

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

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

因此,您可以根据需要左移:

say  1 +< 65; #  36893488147419103232
say -1 +< 65; # -36893488147419103232

现在,如果您想将自己限制为本机整数(通常为64位),则可以使用自动换行:

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的>>>的等效项(无论如何)。

此外,~>运算符尽管已指定,但当前尚未实现。欢迎补丁!