`

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

    博客分类:
  • php
php 
阅读更多
乘法口诀表
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."&nbsp";
   
  }echo "<br/>";
}
水仙花数
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."&nbsp;";
}

}
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点.

“.“与”+“的优先级的问题
字符串强制转换成数字的问题
分享到:
评论

相关推荐

    21位水仙花数

    根据给定的信息,本文将对“21位水仙花数”的相关知识点进行详细解析。 ### 一、水仙花数的基本概念 水仙花数(Narcissistic number)是指一个n位数,它的每个位上的数字的n次幂之和等于它本身的一个数。例如,153...

    html+css九九乘法表

    html+css九九乘法表 html+css九九乘法表 html+css九九乘法表 html+css九九乘法表 html+css九九乘法表 html+css九九乘法表 html+css九九乘法表 html+css九九乘法表 html+css九九乘法表 html+css九九乘法表 html+css...

    打印九九乘法表java

    在Java编程语言中,"打印九九乘法表"是一个常见的初学者练习,它涉及到控制台输出和循环结构。下面我们将详细讨论如何使用Java来实现这个功能,以及在这个过程中会遇到的一些关键知识点。 首先,九九乘法表,也称为...

    c#求水仙花数算法

    在编程领域,水仙花数(也称为 Narcissistic Number)是一个三位数,其每一位数字的立方和等于这个数本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。在C#中,实现寻找水仙花数的算法是一项基础练习,它...

    C语言打印乘法表

    ### C语言打印乘法表知识点解析 在计算机编程学习中,C语言因其高效性和灵活性而被广泛使用。本文将深入探讨如何使用C语言编写一个简单的程序来打印乘法表,并通过对给定代码片段的分析来解释其中涉及的关键概念和...

    C语言 九九乘法表

    九九乘法表,又称乘法口诀表,是数学教育中用于学习乘法基础知识的工具,包含1到9的所有整数的乘积。在C语言中,我们可以利用循环结构和条件判断来实现乘法表的输出。 1. **基本思路**: - 使用两层嵌套循环,外层...

    水仙花数-python

    水仙花数python 1.python分支 1.1 if 单分支判断 1.2 if 双分支判断 1.3 if 嵌套 1.4 if 的多分支判断 2.python循环 2.1 while循环 2.2 for循环 3.python分支 循环案例使用 3.1 字符串的反转 3.2 打印1-100之间的...

    c++ 实现打印九九乘法表

    这将会生成一个可执行文件`九九乘法表`,运行它将在控制台打印出九九乘法表。 总的来说,通过这个简单的C++程序,我们可以学习到基本的循环控制、条件判断以及控制台输出等核心概念。对于初学者来说,这是一个很好...

    九九乘法表(输出和打印)

    九九乘法表,也被称为乘法口诀表,是中国教育体系中常见的基础数学工具,用于教授和记忆乘法运算。在编程领域,创建九九乘法表是一种经典的练习,可以展示基本的循环和控制结构的运用。在这个案例中,我们将讨论如何...

    Javascript打印乘法表

    这个主题关于“Javascript打印乘法表”是JavaScript初学者常见的编程练习,它旨在帮助理解控制流、循环和字符串操作等基本概念。 乘法表是数学教育中的基础工具,用于展示1到10之间任意两个数字的乘积。使用...

    九九乘法表(PHP)

    描述中提到的是一个具体的PHP代码示例,用于打印出九九乘法表。在PHP中,这通常涉及到使用嵌套循环,如for或while循环,外层循环遍历乘法表的行数,内层循环遍历列数。通过这种方式,我们可以依次计算并输出每个乘积...

    九九乘法表

    a++)`这一段用于在每行开始时打印空格,使得乘法表的每一行都居中对齐。 3. **乘法运算**:乘法运算通过`raw*cal`进行,将结果与乘号和乘数一起打印出来。`System.out.print("\t"+raw+"*"+cal+"="+raw*cal)`这行...

    C#代码:计算器,水仙花

    该部分内容包括两个C#控制台应用程序的代码,分别用于输出九九乘法表和水仙花数。 输出九九乘法表 第一段代码用于输出九九乘法表,使用了C#编程语言的基础知识,如循环语句、控制台输出等。代码中使用了两个循环...

    java程序编写打印九九乘法表

    ### Java程序编写打印九九乘法表 #### 知识点概述 本篇文章将详细介绍如何使用Java编程语言来实现九九乘法表的输出,并将其保存为文本文件(txt)格式。我们将从理解基本的Java语法入手,逐步深入到具体代码的实现...

    用servlet写的九九乘法表

    在这个“用servlet写的九九乘法表”项目中,我们可以深入理解Servlet的基本工作原理以及如何将其应用于简单的Web应用程序。 首先,我们需要了解Servlet的生命周期。Servlet在服务器启动时并不立即加载,而是在接收...

    jsp javascript打印九九乘法表代码.docx

    根据给定文件的信息,本文将详细介绍如何使用JSP与JavaScript来实现九九乘法表的打印功能,并分别探讨这两种方法的具体实现步骤。 ### JSP 表达式方式 #### 实现原理 在JSP(JavaServer Pages)中,可以通过内嵌...

    c++源码--九九乘法表

    2. **条件语句**:在输出乘法表的过程中,可能需要使用条件语句(如`if`)来决定是否在每行末尾打印分隔符(如逗号或者换行符),以保持输出的整洁。 3. **格式化输出**:C++提供了`std::cout`进行标准输出,可以...

    java编写一个乘法表

    ### Java编写乘法表知识点详解 #### 一、程序概述 在本篇文章中,我们将深入探讨如何使用Java语言编写一个简单但功能完善的乘法表程序。该程序能够生成1到9的乘法表,并且输出格式整齐美观。通过这个例子,我们...

    程序打印九九乘法表cmd

    本文介绍了九九乘法表的基本概念以及如何使用C++编写一个简单的程序来打印九九乘法表。通过理解这个示例程序,不仅可以掌握基本的C++语法和控制结构,还可以加深对九九乘法表的理解和应用。这对于初学者来说是非常...

    222018321062006 宋行健(冒泡排序,爱因斯坦问题,水仙花数,找因子,算3+33+333,分离数字,乘法表,卖菜,算

    水仙花数是指一个三位数,它的每一位数的立方和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。程序通过遍历100到999之间的所有数,分别计算百位、十位和个位的立方和,如果相等,则输出该数。 ...

Global site tag (gtag.js) - Google Analytics