掌芝士 发表于 2020-6-1 04:42:35

c的运算符,跪求详解,内容如下,有偿采纳

大佬们,求助啊,我真的想不懂这个从右向左算为什么倒数第二个的值是-8,还有那个—i++是怎么运算的啊,跪求大佬给一个详细步骤,详细解答下每一步输出什么此时i的值是什么。

永恒的蓝色梦想 发表于 2020-6-1 06:27:58

你知道也没什么用的。谁会这么写代码呢?

掌芝士 发表于 2020-6-1 07:33:33

不是,考试要考。不然我也不会看

CodingCat_k 发表于 2020-6-1 07:51:41

这和运算符优先级有关,自增/减在左边先将值改变再使用;在右侧则先用一次本来的值,用完再递增;
对于上述printf结果从左至右依次按照规定写即可知;
由于C/C++的参数是从右到左压入栈(也可能直接使用寄存器传参),故按照FILO读取顺序从左至右。

掌芝士 发表于 2020-6-1 08:12:54

CodingCat_k 发表于 2020-6-1 07:51
这和运算符优先级有关,自增/减在左边先将值改变再使用;在右侧则先用一次本来的值,用完再递增;
对于上 ...

嗯嗯,但是我倒数第二个就和课本答案不一样,我算出来的负七,课本是负八,大佬能帮我看下吗

CodingCat_k 发表于 2020-6-1 08:31:26

前面的9--运算完了得8,再给到倒数第二个时就-8了。

4goodworld 发表于 2020-6-1 16:05:15

掌芝士 发表于 2020-6-1 07:33
不是,考试要考。不然我也不会看

这么说呢,我认为如果出卷老师这么出,他应该要给出几个标准答案
因为,出现多个答案的原因在于不同的编译器的结果不一样,再通俗点,就是编译器的运算规则导致了结果不一样
你想知道你现在给出的例子的答案,我建议你手动写下代码,然后在直接选择查看汇编代码
如果你想看比较详细的解释,建议从我这儿点击我回答的一些最佳答案里面早期回复,我曾经多次回复,相信会给你启发的。

405794672 发表于 2020-6-1 16:41:52

其实我遇到这个时也是一头雾水。后来我想起来这一婆,然后printf是这么写i的:++i++i--i--i++然后出问题报错。当时我更加一头雾水,就没管了。没想到是这样的。。。让我来分析一下。如果从右往左。那么右1:-8,但是i之后变成7了,先打印-i,i=8,所以是-8,然后i--,i就变7了。然后开始第二个。-i++,应该为-7,然后i=8。不符合你说的是-8的情况。如果是-8,倒是很符合从左往右算。于是我打开VS编了一下。打印出来的值 为
8,8,7,8,-7,-8。真的不是-8。我们可能用的编译器不一样

Justin1 发表于 2020-6-1 17:45:26

405794672 发表于 2020-6-1 16:41
其实我遇到这个时也是一头雾水。后来我想起来这一婆,然后printf是这么写i的:++i++i--i--i++然后出问题报 ...

我试过类似的,不同编译器打印值可能不同的。考试的话根据题目设计思路来答吧。
比如++i的意思是我先将i+1,再读取它。以此类推,至于为什么不同编译器会不一样,我也不知道。

wyschenhang 发表于 2020-6-1 23:52:44

分开来看不就好了嘛,它们都是各算个的吧,先不管正负的, 先赋值的吧后在运算, 所以是负8 了呗, 新手刚学回答, 回答不好见谅哈

王逗比666 发表于 2020-6-2 13:19:37

好像是由于c语言语法限制比较宽松,所以有关自增自减的具体运算其实是看编译器的,因编译器而不同,这种问题其实没什么意义(小甲鱼有个视频也提到了)

Darth_EF 发表于 2020-6-2 17:23:35

考试要考这种题目?出题人是脑瘫还是只认识某一个编译器啊。
贴吧也是经常出现这种提问贴,真是无语啊。
我之前回答过的一个类似的问题

Darth_EF 发表于 2020-6-2 17:24:35

我之前回答过一个类似的问题
页: [1]
查看完整版本: c的运算符,跪求详解,内容如下,有偿采纳