%运算符是什么意思?

时间:2017-09-22 14:02:22

标签: perl

我最近在Stackoverflow上看到了答案,其中进行了计算以确定值是奇数还是偶数。使用的%总是返回0或1,具体取决于与之比较的值。

我想知道这个%的用法是什么,即使我在谷歌上搜索过,我也只能找到哈希中使用的%

$result = $str % 2;

非常感谢您提前。

4 个答案:

答案 0 :(得分:7)

" modulo"运算符,请参阅perlop

  

[...]计算第一个参数的第二个参数的除法余数。

答案 1 :(得分:7)

这个%是一个模运算符,它返回左操作数的余数除以右操作数,如果左边的值可以被右边的值整除,则为零。如果它位于两个操作数之间,则它不表示哈希符号。

Perl & modulus on perlmonks.org

答案 2 :(得分:4)

模数运算符为整数除法提供余数。

如果数字是奇数或偶数,你会看到它被用来计算出来。将整数除以2时,得到的余数为0(如果数字为偶数)或1(如果数字为奇数)。

my $is_odd = $num % 2;

通常,模数将给出一个比表达式中右手操作数小0到1之间的整数。

与所有运营商一样,perldoc perlop中记录了这一点,其中包含:

  

二进制"%"是模运算符,它根据第二个参数计算第一个参数的除法余数。给定整数操作数$m$n:如果$n为正,则$m % $n$m减去$n的最大倍数小于或等于到$m。如果$n为否定,则$m % $n$m减去$n的最小倍数,且不小于$m(也就是说,结果会更少大于或等于零)。如果操作数$m$n是浮点值且$n的绝对值(即abs($n))小于(UV_MAX + 1),则只有整数部分将在操作中使用$m$n(注意:此处UV_MAX表示无符号整数类型的最大值)。如果右操作数(abs($n))的绝对值大于或等于(UV_MAX + 1)"%"计算等式$r中的浮点余数($r = $m - $i*$n)其中$i是某个整数,使$r与右操作数$n具有相同的符号(作为左操作数$m C函数fmod())和绝对值小于$n的绝对值。请注意,当use integer在范围内时,"%"使您可以直接访问C编译器实现的模运算符。这个运算符没有为负操作数定义,但它会更快地执行。

答案 3 :(得分:0)

如其他人所述,%modulo operator,它在进行算术除法后返回余数。通常需要余数(模数的结果) 商(除法的结果)。幸运的是,在Perl中同时获得两者都很容易!

我将采用一种有效的数学形式:dividend / divisor = quotient + remainder

enter image description here

您始终可以通过...获得商和余数。

my $dividend = 100;
my $divisor = 3;
my ($quotient, $remainder) = (int $dividend / $divisor, $dividend % $divisor);
print($dividend . ' / ' . $divisor . ' = ' . $quotient . ' (quotient) + ' . $remainder . ' (remainder)');

这给出了结果:

100 / 3 = 33 (quotient) + 1 (remainder)

这是一个不错的,有用的单行解决方案。这是一个带有时间示例的实际演示...

my $diff = 642;
my $divisor = 60;
my ($minutes, $seconds) = (int $diff / $divisor, $diff % $divisor);
print($minutes . ':' . $seconds);