在TC中(i++)*(++i)+(i--)*(--i)+(i--)*(--i)为什么等于12

来源:百度知道 编辑:UC知道 时间:2024/04/29 18:30:50
i初值为3
想请教大家一个问题今天看C教程时看到个题目讲解
算表达式的值 i++ * ++i + i-- * --i结果是18
说明是CPU对表达式优化后 i++ * ++i 和 i-- * --i这两个可以同时处理 然后先同时处理++i --i 并且都是从3开始一个是4 一个是2
然后同时处理i++ 和 i--也是同时从3取出来两个都是3,
所以表达式是3*4+3*2=18
但是这样理解的话表达式(i++*++i)+(i--*--i)+(i--*--i)那应该是12+6+6=24 但是运行结果是12 这到底是为什么

不是你那样算的,应该是先算++i,得i为4,再算--i,又得i为3,于是有3*3+3*3=18
底下那个一样的

一个表达式中出现多处++或--的表达式在C/C++中本来就是一种错误的写法,只有在JAVA中才是正确的,在C/C++中,不同的编译器会给出不同的结果,所以楼主可以跳过这个问题,只要记住一句就行,++/--在变量前,先进行++/--再运算,++/--在变量后时,先进行运算再进行++/--;

楼主等于12
我的等于33

取决于编译器

我的老师说等于15,然后又改了,我想这个问题应该是等于12
i++和++i的不同在于计算机运算是的先后顺序
应该说i++比++i 高一个运算级别