Gorgon_Meducer 发表于 2004-12-9 14:45:31

[古董贴][求教]如何计算一个奇怪的C语言表达式的值

如果

int a=12;

那么

a-=a+=a*=a

的结果是多少呢?

答案是0,想不明白




-----此内容被Gorgon Meducer于2004-12-11,18:54:02编辑过

dd123 发表于 2004-12-9 18:26:22

这样的题就象茴香豆的“茴”有几种写法一样无趣。

bucker 发表于 2004-12-9 18:51:18

一个有趣的问题,-=、+=、*=属于同一优先级,顺序为从右至左,那么应该是先计算*=,再计算+=,最后计算-=,当计算-=时表达式应为a=a-a,所以结果为零。

Gorgon_Meducer 发表于 2004-12-11 18:55:11

谢谢,粗心了,没有注意运算的主体一直是A

stonkson 发表于 2005-1-6 10:25:46

这样的东东做考试题还凑或

实际工作绝对不可取,不断这样,即使是优先级对的几级运算中,最好也要加上括号,这样程序更易读,比如 a=i>>2+j;最好写成a=i>>(2+j);

zhifeng 发表于 2005-1-6 11:44:08

这样的问题如果编译器规则遇到此类优先级问题一律加括号就好了,免得一些无聊的考官或貌似有学问的人哪来考别人,此类问题到机器上一试马上知晓,却有些人哪来卖弄。我就曾遇到应试时考官问keil c51 c语言与汇编参数互相调用,对应记存器R?的问题。机器能完成的事情我们为何要记忆?

zhzzh18 发表于 2005-1-6 12:03:22

运算有疑问就加括号。

SUN0_LIANG 发表于 2005-1-7 11:02:05

bucker 沙漠和我想的一样。不知实际对不对???

用C编译出汇编,看一下就知道了。

Gorgon_Meducer 发表于 2005-1-7 11:48:29

对不起,只是一道无聊的考试题目,本来不值得探讨的……(即使算灌水,我仍然要说明一下)

uusky 发表于 2005-7-14 13:50:28

我觉得不需要算呀!只需要看一下a-=a+=a*=a,不论前面a算出来得多少,最后一步肯定是这样的a-=a,所以肯定为0!!!

long98732123 发表于 2005-7-15 10:15:31

傻孩子也有空做这个?呵呵

cnshyl 发表于 2008-3-8 04:25:48

my god!
资源的浪费
页: [1]
查看完整版本: [古董贴][求教]如何计算一个奇怪的C语言表达式的值