1. 云栖社区>
  2. PHP教程>
  3. 正文

php打印乘法表水仙花数a++ ++a 的区别a++ ++a 的区别

作者:用户 来源:互联网 时间:2017-12-01 13:31:36

php打印区别乘法表水仙花

php打印乘法表水仙花数a++ ++a 的区别a++ ++a 的区别 - 摘要: 本文讲的是php打印乘法表水仙花数a++ ++a 的区别a++ ++a 的区别, 乘法口诀表header("Content-type:text/html;Charset=utf-8");for($i=1;$i<10;$i++){  for($k=1;$k<=$i;$k++){     echo"$k * $


乘法口诀表
header("Content-type:text/html;Charset=utf-8");
for($i=1;$i<10;$i++){
  for($k=1;$k<=$i;$k++){
     echo"$k * $i =".$k*$i." ";
   
  }echo"
";
}
水仙花数
for($i=100;$i<1000;$i++){
$a=intval($i/100);
$b=intval($i/10);
$c=$i;
if(pow($a,3)+pow($b,3)+pow($c,3)==$i){
   echo $i." ";
}
}
a++ ++a  的区别
++$i 没有什么好说的,就是无论什么情况,都先把$i加1 ,然后再干别的
主要说说 $i++;
所有人都知道,$i++ 是先取值,后++,但是大多数人都有一个误解,就是认为这条语句执行完毕之后,$i再加1。其实真实的情况是:变量被加1的时刻发生于$i被++之后的下一次取值
为了理解这句话,我们看几个例子:
1、
1: $i = 2;
2: echo $i++ + $i;
复制代码
结果是5
看第二行,运算中要先得到运算符两边的值之后再运算,通过加1的时刻发生于 $++ 之后的下一次取值可以得知:
a、首先计算运算符左边被加数的值,由于后++的法则是先抛值再加1,所以这时从 $i 取到的值为 2,同时把发生在 $i 身上的后++操作记录下来。这时运算符左边为 2。注意,这时 $i 还未真正的+1
b、接着取运算符右边的加数。他取 $i 的值的时候发现 $i 曾经++过,于是把 $i 加 1 的结果赋给 $i 的同时,返回被+1之后的$i,于是从第二个$i取得的值是被加1之后的值,3。这时运算符右边为3。
c、2+3=5
2、
1: $i = 2;
2: echo $i + $i++;
复制代码
还是第二行。同样要先计算两面,于是便有:
a、首先计算左边,取得$i的值为 2,这个没什么好说的。
b、计算右边,由于后++的特性是先抛值,所以加号运算符右边得到的值也是2
c、2+2,结果是4
最后看一个复杂一点的:
$a=5;
$a+=++$a+$a++;
复制代码
不要被a+=b迷惑,通过 a+=b === a=a+b 转换一下看得更清楚:
$a = ++$a + $a++ +$a;
优先级是这样的:先计算自增减表达式,再根据乘除加减这个基本顺序计算整个表达式
这样我们模拟一下电脑:
a、++$a,直接将$a+1赋值给$a,之后抛出 $a 的值,++$a 这个表达式的位置当前值就成为了 6,现在$a也是6
b、$a++。因为后++是先抛值,所以直接抛 $a 的值 6。这时 $a++ 这个位置的当前值是6。
c、$a。取$a的值的时候发现他曾经有过被++的操作,于是把 $a 加上1赋值给$a,同时抛出值7。这时 $a这个位置的当前值就变成了7
d、$a = 6+6+7,结果是19。
只要记住:当变量$i发生后++的情况时,并不进行+1运算,而是在被++之后仅仅记录++操作,下一次取$i值的时候再+1返回。
一个比较有意思的例子是hightman发出来的:
$a = 1;
$b = &$a;
$b = $a++;
echo"a: $a nb: $b";
复制代码
你将会发现 $a 和 $b 都是 1。按照上面所说,应该是2才对啊。怎么解释呢。其实解释很简单,就是++操作丢了。听起来不可思议,其实不难理解。这里面跟++已经没有什么关系了,完全是'引用'这个东西在指使。
关于引用的话题,请参加我的另一篇帖子[关于引用的解释]:
http://bbs.chinaunix.net/viewthr ... &extra=page=1
刚才在论坛看到的..题目是这样的:
View Code
1 2
$i = 1; echo"i=".(++$i)+(++$i)+(++$i);
大家可以去运行一下 结果会是7!
这让我们很纳闷 为什么是7呢? 无论如何都出不来7啊..
下面我们改一下这道题目
View Code
1 2
$i = 1; echo (++$i)+(++$i)+(++$i);
这时候在让你回答.我觉得你是可以回答出正确答案的.
没错. 这个答案是9..我想这个我就不必解释了. 2+3+4 所以等于9
那么回到最上面的题.为什么会是7呢?
其实蒙蔽就蒙蔽在那么多自增运算符了. 我们可以去查一下手册运算符的优先级可以看到.
+ – .属于一个优先级 .也就是说PHP计算的时候需要从左向右计算.
所以PHP需要先计算 “i=”.(++$i) 这时候答案是会是 “i=2″ 注意这是字符串.
在PHP中”.“与”+“的区别是相当分明的.”.“就是字符串运算.”+“就是数字运算.
这时候的运算便成了”i=2″+(++$i)+(++$i)了 我们看到 运算中没有了点.所以PHP会去实行数字运算.
但是第一个是字符串.所以PHP会把”i=2″这个字符串强制转换成数字.由于这个字符串的第一个字符不是数字.所以强制转换后的记过就是0。如果这个字符串是”2i=2″.那么转换后就变成2了.
这时候0+3+4 所以就等于7了.
好了 总结下 这道题需要我们注意2点.
“.“与”+“的优先级的问题
字符串强制转换成数字的问题

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php , 打印 , 区别 , 乘法表 水仙花 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备