【问题标题】:Is the behavior of % with negative operands defined in Perl 5?% 的行为是否在 Perl 5 中定义了负操作数?
【发布时间】:2011-04-06 08:35:12
【问题描述】:

直到最近(即 C99),模运算符的行为是在 C 中定义的。由于 Perl 5 是用 C 编写的,它是否依赖于用于构建它的 C 编译器的行为?

【问题讨论】:

    标签: perl modulo


    【解决方案1】:

    不,Perl 5 在 perlop 中定义了模运算符,甚至还进行了测试以确保它按文档说明工作。

    来自 perl/t/op/arith.t

    tryeq $T++,  13 %  4, 1;
    tryeq $T++, -13 %  4, 3;
    tryeq $T++,  13 % -4, -3;
    tryeq $T++, -13 % -4, -1;
    

    但是,如果您使用 integer pragma,您将受到 C 编译器的怜悯。

    【讨论】:

    【解决方案2】:

    Perl 实现了它自己的模运算符,但您可以通过使用 integer pragma 从您的 C 编译器中获得模运算符。 perlop

    请注意,当使用整数在范围内时,“%”让您可以直接访问由 C 编译器实现的模运算符。该运算符对于负操作数的定义不是很好,但它会执行得更快。

    也就是说,你在使用integer 时必须小心,因为模数可能会给你不同的答案。

    【讨论】:

      猜你喜欢
      • 2019-02-15
      • 1970-01-01
      • 2015-06-10
      • 2011-04-16
      • 1970-01-01
      • 2012-06-11
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多