这天,群里有个学员提了一个问题,我扫了一眼,本没想解答,心太累,智商捉急。
后来不知道为啥觉得还有点代表性和共性,遂整理到博客中,希望供大家参考。
题目是这样的:
int a = 3, b;
b = (a++)+(++a)+(a++)*2+a+(++a);
答案是31 ,关键要问的问题是 为什么是31
看到这种问题我就想到了 幼儿园的一个题目:小青有10只苹果,小庆有8只梨子,请问小青把2只苹果换小庆3只梨子,此时两人各有几只梨子和苹果。(心好累)
好吧,一般c/c++基础深厚的同学也有可能算错或者搞混(这里咱不带直接拷贝到程序里计算的哦~~~)
这里首先要搞清两个概念
a++和++a 一个是后加,一个是先加 。
神马叫后加?
a=1,b=a++, 运算结束后b=1,a=2
那么先加呢?
a=1,b=++a 运算结束后b=2,a=2
这里有个共同点,不管先加还是后加,a的值一定会+1.
然后我们再看上面的问题,我们会发现就算搞懂了先加和后加的概念,tmd好像还是不知道上面的31是几加几得来的。
那么我们就要换种思路来解决?
1、人脑比较智能,看到上面的表达式,会从左到右分别加。就是因为太智能会导致混乱,到最后很容易因为掌握了概念反而算错
2、电脑别看能算很牛的表达式,但其实它就是个SB。电脑看到上面的公式首先是分解,根据表达式分解为5个公式
1)b=a++; //此时的b 是 3
2)b=++a; //此时的b 是 5
3)b=(a++)*2; //此时的b 是 10
4)b=a; //此时的b 是 6
5)b=++a; //此时的b 是7
最后的结果就是3+5+5*2+6+7
总结下:
1、基本概念还是要清楚
2、能连着把“为什么”说清楚的人 靠的是智商
3、如果大家像我的智商那么捉急,那么不妨用用情商,把表达式分解为5步。就能知道为什么
4、说实话我一眼看到这个表达式,一开始我是算错的,尽管我知道先加和后加的概念。
5、有时候做个程序员,有的人靠的是智商,很牛逼。但是有的人可以智商和情商并用,互相弥补不足,也是一种处世之道。
我的视频教学:《从此不求人:自主研发一套PHP前端开发框架》
————————————————–
【你如果不爱读书、不爱看新闻、不爱学习,没关系。我来做你的”陪读郎”】
奴隶我的方式:请关注微信订阅号:程序员在囧途。
每天讲故事、讲商业模式、讲技术给你听。
我的个人站点:www.hishenyi.com