用php写出1到100加法,你可能不知道的PHP加减法

这可能算不上是一次正规的解说,毕竟有点烧脑。

起因

是这样的,我们都知道php语法里有自增操作,即 ++,那么下面我列出一个表达式

$a = 1;

$result = $a + $a++; // $result === 3

好的,为什么等于3?只有一种解释,就是自增的优先级高于加减,所以二号位自增导致了一号位也变成2。(3 = 2 + 1)

既然一号位变成了2,为何二号位不会变成2呢?因为后置自增的返回值仅是临时变量,这点和 C/C++是一致的,毕竟PHP也是基于C实现的。

换个写法

$a = 1;

$result = $a + ++$a; // $result === 4

似乎验证了刚才的解释。由于是前置自增,所以二号位自己的值也变成了2。(4 = 2 + 2)

恶化

接下来,我们把数量增加到3个

$a = 1;

$result = $a + ++$a + ++$a; // $result === 7

为什么是7?按照思路,应该是 9 = 3 + 3 + 3,也是醉了,并没有按照常理出牌。

增加到4个呢

$a = 1;

$result = $a + ++$a + ++$a + ++$a; // $result === 11

答案也不是 16 = 4 + 4 + 4 + 4,好吧,和我想的不一样。

猜测

既然2个$a相加可以正确推算,而3个开始就出错,为何?于是有了一个猜测,PHP是这样相加的

$a = 1;

$result = ( ( $a + ++$a ) + ++$a ) + ++$a; // $result === 11

优先级顺序 () > ++ > +,11 = ( ( 2 + 2 ) + 3 ) + 4,每跳出一层,$a都自增了1。

有括号和没有括号的运算,最终运算结果都是11,我有点确信隐形括号这个事实。

隐形括号

于是我只让最后一个$a是自增的

$a = 1;

$result_a = $a + $a + $a + ++$a; // $result_a === 5

$a = 1;

$result_b = ( ( $a + $a) + $a ) + ++$a; // $result_b === 5

好的,$result_a 和 $result_b 的值是一样的。5 = ( ( 1 + 1 ) + 1 ) + 2

我们此时加入后置自增,看看结果会不会一样

$a = 1;

$result_a = $a + $a + $a++ + ++$a; // $result_a === 6

$a = 1;

$result_b = ( ( $a + $a) + $a++ ) + ++$a; // $result_b === 6

是的,遵循了隐形括号的规则, 6 = ( ( 1 + 1) + 1 ) + 3。

诡异的1

为了给隐形括号做个最终的定论,我们再看一个烧脑例子

$a = 1;

$result_a = $a + ++$a + ++$a; // $result_a === 7

$a = 1;

$result_b = 1 + $a + ++$a + ++$a; // $result_b === 7

不不不,你没有看错,$result_b的前面真的多了一个1。但是,它们的值都是7。你知道为什么吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Java 中,你可以使用一个循环来实现 1 到 100 的加法。下面是一个示例代码: ``` public class Main { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } System.out.println("1到100的和为:" + sum); } } ``` 上面的代码使用了一个 for 循环,从 1 开始迭代,直到 i 的值大于 100。在每一次迭代中,它会将 i 的值加到 sum 变量中。最后,它会输出 sum 变量的值,这就是 1 到 100 的和。 ### 回答2: 使用Java编写一个1到100加法的代码如下: ```java public class Addition { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } System.out.println("1到100加法结果为:" + sum); } } ``` 上述代码中,我们定义了一个`Addition`类,并在`main`方法内部进行了循环计算1到100加法。我们使用了一个`sum`变量来累计每次循环的结果,一开始将其初始化为0。然后,使用`for`循环遍历从1到100的所有数字,将每个数字累加到`sum`变量中。最后,我们使用`System.out.println`方法来输出1到100加法结果。 运行上述代码,会得到如下输出: ``` 1到100加法结果为:5050 ``` 因此,1到100加法结果为5050。 ### 回答3: 使用Java编写一个1到100加法可以采用循环结构和累加的方式来实现。 首先,我们可以声明一个整型变量sum并初始化为0,用来存储累加的结果。 然后,我们可以使用for循环语句从1循环到100,每次将循环变量i加到sum上,实现累加操作。 最后,输出sum的值,即为1到100加法结果。 下面是代码示例: ```java public class Addition { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } System.out.println("1到100加法结果为:" + sum); } } ``` 以上代码中,我们使用for循环来从1到100之间的每个数进行累加,将结果存储在sum变量中。最终通过System.out.println输出累加的结果。 执行以上代码,输出结果为:1到100加法结果为:5050。 通过循环和累加的方式,我们可以很方便地计算1到100加法,并获得最终的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值