% 运算符的含义是什么?

问题描述 投票:0回答:4

我最近在 Stack Overflow 上看到一个答案,其中进行计算以确定一个值是奇数还是偶数。使用了

%
,它总是返回 0 或 1,具体取决于与之比较的值。

我想弄清楚这个

%
的用途是什么,即使我在谷歌上搜索,我也只能找到
%
用于哈希。

$result = $str % 2;
perl
4个回答
9
投票

它是“模”运算符,请参阅perlop

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


8
投票

模运算符给出整数除法的余数。

您看到它被用来计算一个数字是奇数还是偶数。将整数除以 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
的不小于
$m
的最小倍数(即结果将小于或等于 0)。如果操作数
$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 编译器实现的模运算符。该运算符对于负操作数的定义不那么明确,但执行速度会更快。


7
投票

这个

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

请参阅 perlmonks.org 上的 Perl 和模数


0
投票
正如其他人所述,

%

取模运算符,它返回算术除法后的余数。 想要余数(模数的结果)商(除法的结果)是很常见的。 幸运的是,在 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);
    
© www.soinside.com 2019 - 2024. All rights reserved.