Perl与Java的>>和>>>运算符相当于6?

mad*_*mma 9 bit-shift perl6

我已经使用Perl 6开始,我目前从我的Java项目移植了一些代码,他们使用Java的移位操作符<<>>,还有>>>运营商.

目前我正在使用+> \ +<(和~>)运营商来弥补这一点,但它们是否相同?

Eli*_*sen 10

这一切都取决于你放在操作员左侧的内容.因为Perl 6默认在bigints上工作(也就是说,整数值会随着你的内存不足或者厌倦等待而增大),这实际上取决于你在右移时是否有负值或正值.

say  2**65 +> 63; #  4
say -2**65 +> 63; # -4
Run Code Online (Sandbox Code Playgroud)

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

say  1 +< 65; #  36893488147419103232
say -1 +< 65; # -36893488147419103232
Run Code Online (Sandbox Code Playgroud)

现在,如果你想将自己限制为原生整数,通常是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
Run Code Online (Sandbox Code Playgroud)

而且人们可以说这些都是那么的等价<<>>Java编写的.并且Perl 6没有相当于Java >>>(但无论如何).

此外,~>运营商虽然已经提出,但目前尚未实施.补丁欢迎!