我最近在 Stack Overflow 上看到一个答案,其中进行计算以确定一个值是奇数还是偶数。使用了
%
,它总是返回 0 或 1,具体取决于与之比较的值。
我想弄清楚这个
%
的用途是什么,即使我在谷歌上搜索,我也只能找到%
用于哈希。
$result = $str % 2;
它是“模”运算符,请参阅perlop。
[...] 计算第一个参数相对于第二个参数的除法余数。
模运算符给出整数除法的余数。
您看到它被用来计算一个数字是奇数还是偶数。将整数除以 2 时,余数为 0(如果数字是偶数)或 1(如果数字是奇数)。
my $is_odd = $num % 2;
一般来说,模数会给你一个介于 0 和比表达式中右侧操作数小 1 之间的整数。
与所有运算符一样,它记录在 perldoc perlop 中,其中表示:
Binary
是模运算符,它计算第一个参数相对于第二个参数的除余数。给定整数操作数"%"
和$m
:如果$n
为正,则$n
等于$m % $n
减去$m
小于或等于$n
的最大倍数。如果$m
为负数,则$n
为$m % $n
减去$m
的不小于$n
的最小倍数(即结果将小于或等于 0)。如果操作数$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
,如 C 函数$m
)且绝对值小于fmod()
。请注意,当$n
在范围内时,use integer
可让您直接访问由 C 编译器实现的模运算符。该运算符对于负操作数的定义不那么明确,但执行速度会更快。"%"
这个
%
是一个模运算符,它返回左操作数除以右操作数的余数,如果左侧的值可被右侧的值整除,则该余数为零。如果它位于两个操作数之间,则它不代表哈希符号。
请参阅 perlmonks.org 上的 Perl 和模数。
%
是取模运算符,它返回算术除法后的余数。 想要余数(模数的结果)和商(除法的结果)是很常见的。 幸运的是,在 Perl 中很容易同时获得这两者! 我将采用有效的数学形式:
dividend / divisor = quotient + remainder
。您始终可以通过以下方式获得商和余数...
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);