Perl 6 等同于 Java 的 >> 和 >>> 运算符?
Perl 6 equivalents to Java's >> and >>> operators?
我已经开始使用 Perl 6,目前正在从我的 Java 项目中移植一些代码,他们使用 Java 的移位运算符 <<
和 >>
,以及 >>>
运算符。
目前我正在使用 +> \ +<
(和 ~>
)运算符来弥补这一点,但它们是否等效?
这完全取决于您在运算符左侧放置的内容。由于 Perl 6 默认在 bigints 上工作(又名,整数值会增加大小直到你 运行 内存不足或厌倦了等待),这实际上取决于你是负值还是正值你右移。
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 的 >>>
的等价物(无论如何)。
此外,~>
运算符虽然已指定,但目前尚未实现。欢迎补丁!
我已经开始使用 Perl 6,目前正在从我的 Java 项目中移植一些代码,他们使用 Java 的移位运算符 <<
和 >>
,以及 >>>
运算符。
目前我正在使用 +> \ +<
(和 ~>
)运算符来弥补这一点,但它们是否等效?
这完全取决于您在运算符左侧放置的内容。由于 Perl 6 默认在 bigints 上工作(又名,整数值会增加大小直到你 运行 内存不足或厌倦了等待),这实际上取决于你是负值还是正值你右移。
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 的 >>>
的等价物(无论如何)。
此外,~>
运算符虽然已指定,但目前尚未实现。欢迎补丁!