lancaster99 发表于 2022-10-26 09:18:09

新人求助运算符

5.设有语句int a=4;则执行了语句a+=a-=a*a后,变量a的值是()
A)-24      B)0       C)4      D)16 

想知道用c语言的代码怎么写以及他计算的逻辑谢谢!
你能帮帮我吗?

homeskating 发表于 2022-10-26 09:42:34

答案是-24
#include<stdio.h>
int main(){
        int a=4;
        a+=a-=a*a;
        printf("%d",a);
}

homeskating 发表于 2022-10-26 09:45:54

补充一下a-=a*a;的值为-12,a+=a即为-12+-12=-24

人造人 发表于 2022-10-26 10:33:36

unsequenced modification and access to 'a'

这个是什么意思呢?
意思就是说,标准没有说这个表达式的值是什么,编译器的作者就随便整吧
就是这样

我这边的这个编译器是这样整的,你那边的编译器有可能不是这样整的

int main(void) {
    1139:       55                      pushq%rbp
    113a:       48 89 e5                movq   %rsp,%rbp
    113d:       48 83 ec 10             subq   $0x10,%rsp
    int a = 4;
    1141:       c7 45 fc 04 00 00 00    movl   $0x4,-0x4(%rbp)
    a += a -= a * a;
    1148:       8b 45 fc                movl   -0x4(%rbp),%eax
    114b:       0f af c0                imull%eax,%eax
    114e:       29 45 fc                subl   %eax,-0x4(%rbp)
    1151:       8b 45 fc                movl   -0x4(%rbp),%eax
    1154:       01 45 fc                addl   %eax,-0x4(%rbp)
    printf("%d\n", a);
    1157:       8b 45 fc                movl   -0x4(%rbp),%eax
    115a:       89 c6                   movl   %eax,%esi
    115c:       48 8d 05 a1 0e 00 00    leaq   0xea1(%rip),%rax      # 2004 <_IO_stdin_used+0x4>
    1163:       48 89 c7                movq   %rax,%rdi
    1166:       b8 00 00 00 00          movl   $0x0,%eax
    116b:       e8 c0 fe ff ff          callq1030 <printf@plt>
    return 0;
    1170:       b8 00 00 00 00          movl   $0x0,%eax
}
    1175:       c9                      leaveq
    1176:       c3                      retq

jhq999 发表于 2022-10-26 16:08:50

这种题的主要作用就是告诉你,实操时尽量避免这样写

Freedy_S 发表于 2022-10-26 18:58:18

-24
先算a-=a*a➡️a = a - a * a➡️a = -12
再算a += -12➡️a = a + (-12)➡️a = -24

小伍伍 发表于 2022-10-29 15:42:38

就是c语言程序运行的时候是按从右向左

高山 发表于 2022-11-4 20:18:45

本帖最后由 高山 于 2022-11-4 20:20 编辑

#include<iostream>
using namespace std;
int main(){
      int n=4;
      n+=n-=n*n;
      cout<<n<<endl;
      return 0;
}
实际运行效果:

答案是-24
能不能设置最佳答案?
页: [1]
查看完整版本: 新人求助运算符