你不一定会做的简单运算题-已废除

会做的错题
这个我会,可是我做错了。越是简单的事情越容易忽视,这就是习惯性错误。也就是这样引入了今天这个一道简单的运算题。
有这样经历的应该不止我一个,看到此题目进来的朋友你是否也曾有过在考试时做错,却在试后大叹,这个题这么简单,我怎么就做错了,实在不应该。我们常常总结为马虎,其实是一个习惯,可能是视觉习惯引起的类似错误,也可能是意识上的轻视引起的错误,总之这些情况下的错误我们是可以避免的,可是今天我们还是必须来回顾一道简单的运算题。
本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com)
错题起因
A:问你一个简单的问题?
B:我现在有些忙,你把问题发给我看看
A:这个题很简单,不许敲代码,请直接把答案写在脑海里。(接下来参与这个题无需使用身边的键盘,直接心算即可)
A:
$a = 5;
echo $a + ($a++) + (++$a);
B:这么简单一个题你都不会啊? 5+5+7=17,输出17!
A:你确定?
B:我确定!
A:你自己敲代码试一下。
于是乎B就在浏览器console下敲了这样一句代码:
var a = 5;
console.log(a + (a++) + (++a));
本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com)
你应该可以猜到运算结果是什么,B就截图给A了,过了一会儿A也截图给了B。这个时候B开始意思到了这其中肯定有文章,用PHP写了一遍代码,运算结果不一致,看了一下也没有发现其中有什么问题,尽可能学会自己解决问题,决定开始查阅一下PHP手册。
PHP中运算原来是这样的
来源于官方文档中的一个Example:
<?php
$a = 1;
echo $a + $a++; // may print either 2 or 3
?>
为什么注释是may print either 2 or 3?
因为是// mixing ++ and + produces undefined behavior
可是结果尝试还是等于3,我有些不明白2是怎么得到的,请知晓的小伙伴指教。PHP在运算上原来还有这样一个坑,我跳下去了,你就不要跳了,免得压伤了我。
按照PHP运算优先级先运算了$a++ = 1;此时$a的值经历了自加1后变为$a = 2;于是2+1=3。
我在坑中等你放下绳索
尝试了JS,C#结果都是2,能明白其中细节的小伙伴不妨与我探讨一下,还有其它的坑也不妨拿出来分享一下。
本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com)
原文地址:https://www.cnblogs.com/unofficial/p/3963380.html