php公钥模数,PHP模数运算符(详解)

本篇文章主要讲述,PHP中的模数运算符,接下来由SKY8G进行编辑和讲解。

大家都知道,PHP总共有八个算术运算符。最常见的是加法addition(+),减法subtraction(-),乘法multiplication(*)和除法division(/)。少为人知,但还有一个非常重要的运算符是取模modulo(%)。在本教程中,我们将重点关注取模运算符。我们将讨论它的作用以及它在实际用途。

在数学中,模运算用于找到两个数之间的余数。给定两个正数,即被除数(x)和除数(y),模数是除以y(x / y)的欧几里德除法的余数。例如,表达“7模数3”将评估为1,因为7除以3得到2的商和1的余数。另一个例子,“9模数3”将评估为0,因为9除以3的商为3,余数为0 。我们一直在做这是我们小学四年级的时候,当我们第一次学习长期分裂和剩余时。

模运算符是做什么的?

如果你有两个变量$a和$b,计算$a % $b-通常发音为“a与b取模” 取模是一个整数运算符,因此它在计算余数之前将两个操作数转换为整数。因此,基本上模数会进行整数除法,然后将从被除数中除不尽的余数返回,则这个余数就是取模的结果。

1.取模的作用可以用来取余数。

2.取模的作用可以判断两个整数是否整除

3.取模的作用一个整数与整数2取模可以判断这个整数是偶数还是奇数

4.还用更加复杂的取模运算,进行逻辑判断等等,这里就不一一列举了。

取模运算的工作原理:

a.取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。

b.取模运算符%的结果和被除数的符号(正负号)相同。即$a % $b的结果和$a的符号相同。

它乍一看并不是很有用。但是,它在某些情况下非常有用。下面我举几个例子大家可以看看:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22 <?php

echo89%37,"\n";

// Output: 15

echo89%-37,"\n";

// Output: 15

echo-89%37,"\n";

// Output: -15

echo-89%-37,"\n";

// Output: -15

echo-55.4%-4.2,"\n";

// Output: -3

echo-55.9%-4.8,"\n";

// Output: -3

echo-55%-4,"\n";

// Output: -3

输出

1

2

3

4

5

6

7 15

15

-15

-15

-3

-3

-3

例子2,判断一个数字为偶数还是奇数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21 <?php

$numbers=array(66,57,89,33,22);

foreach($numbersas$num)

{

$m=($num%2);

if($m==0)

{

echo$num,"  is even ","
";

}else{

echo$num,"  is odd ","
";

}

}

// Further simplified code

foreach($numbersas$num)

{

if($num%2){

echo"$num is odd
";

}else{

echo"$num is even
";

}

}

例子3,挑战数学,例如:打印出20到250之间9的所有因子

1

2

3

4

5

6

7

8

9

10

11

12 <?php

$i=25;

while($i<=250)

{

$m=($i%9);

if($m==0)

{

echo$i."

";

}

$i++;

}

例子4,为HTML表中的交替行改变(背景颜色)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

zebratable

#mytable tbody tr.even td{

background-color:#d3ecf5;

}

#mytable tbody tr.odd td{

background-color:#ff0;

}

$myData=array('one','two','three','four','five');

$row=0;

foreach($myDataas$data):?>

">

例子4,判断年份是否为闰年和平年

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

zebratable

#mytable tbody tr.even td{

background-color:#d3ecf5;

}

#mytable tbody tr.odd td{

background-color:#ff0;

}

$myData=array('one','two','three','four','five');

$row=0;

foreach($myDataas$data):?>

">

例子5,另一个用途是信用卡验证。有没有想过网站如何判断您的信用卡是否有效?他们使用mod 10算法,这是大多数信用卡符合的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48 <?php

//http://www.codeguru.com/cpp/i-n/internet/security/article.php/c15307/PHP-Tip-Validating-a-Credit-Card.htm

functionvalidate_cc_number($cc_number){

/* Validate; return value is card type if valid. */

$false=false;

$card_type="";

$card_regexes=array(

"/^4\d{12}(\d\d\d){0,1}$/"=>"visa",

"/^5[12345]\d{14}$/"=>"mastercard",

"/^3[47]\d{13}$/"=>"amex",

"/^6011\d{12}$/"=>"discover",

"/^30[012345]\d{11}$/"=>"diners",

"/^3[68]\d{12}$/"=>"diners",

);

foreach($card_regexesas$regex=>$type){

if(preg_match($regex,$cc_number)){

$card_type=$type;

break;

}

}

if(!$card_type){

return$false;

}

/*  mod 10 checksum algorithm  */

$revcode=strrev($cc_number);

$checksum=0;

for($i=0;$i

$current_num=intval($revcode[$i]);

if($i& 1) {  /* Odd  position */

$current_num *= 2;

}

/* Split digits and add. */

$checksum+=$current_num%10;if

($current_num>9){

$checksum+=1;

}

}

if($checksum%10==0){

return$card_type;

}else{

return$false;

}

}

例子6,计算时间秒数换算成时分秒。

1

2

3

4

5

6

7

8

9

10

11 <?php

$total_seconds=32987;

$hours=(int)($total_seconds/3600);

$minutes=(int)(($total_seconds-3600*$hours)/60);

$seconds=$total_seconds%60;

echo'Hours:'.$hours.' Minutes:'.$minutes.' Seconds:'.$seconds.'';

?>

浮点模数

如果要在两个浮点数取模计算余数,则必须使用该fmod($dividend, $divisor)函数。它返回除法后的浮点余数。余数值与被除数的符号相同,其大小将小于除数。这三个数字的关系如下:

1 $dividend=i*$divisor+$remainder

这里,值i总是一个整数。

例如:

1

2

3

4

5

6 <?php

$x=5.7;

$y=1.3;

$r=fmod($x,$y);

// $r equals 0.5, because 4 * 1.3 + 0.5 = 5.7

?>

您应该记住,由于分数的二进制或十进制表示的限制,浮点运算并不总是准确的。例如,1/3不能以十进制形式准确表示。你可以继续写0.33333 ….但在某些时候你必须停止。在十进制表示中每增加3个,您将更接近原始值,但该值仍然不是正好1/3。

这种不准确性导致fmod()功能问题  :结果并不完全可靠。

以下是该fmod()功能的一些示例:

1

2

3

4

5

6

7

8

9 <?php

echofmod(18.8,2);

// Output: 0.8

echofmod(18.8,0.2);

// Output: 0.2

?>

第二个值不准确,因为0.2完全分为18.8。这只是计算机使用的浮点格式计算的一个缺点。

好了,通过本篇文章相信你对PHP的取模有所了解了吧。模运算符虽然易于使用,但它有很多应用程序。我们通过查看正数和负数以及浮点数的模数开始本教程。之后,我们介绍了一些我们将使用模数的常见场景。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值