鱼C论坛

 找回密码
 立即注册
查看: 3052|回复: 7

[已解决]新人求助运算符

[复制链接]
发表于 2022-10-26 09:18:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

想知道用c语言的代码怎么写以及他计算的逻辑谢谢!
你能帮帮我吗?
最佳答案
2022-11-4 20:18:45
本帖最后由 高山 于 2022-11-4 20:20 编辑
  1. #include<iostream>
  2. using namespace std;
  3. int main(){
  4.         int n=4;
  5.         n+=n-=n*n;
  6.         cout<<n<<endl;
  7.         return 0;
  8. }
复制代码

实际运行效果:
黑灰.png
答案是-24
能不能设置最佳答案?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-26 09:42:34 | 显示全部楼层
答案是-24
  1. #include<stdio.h>
  2. int main(){
  3.         int a=4;
  4.         a+=a-=a*a;
  5.         printf("%d",a);
  6. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-26 09:45:54 | 显示全部楼层
补充一下a-=a*a;的值为-12,a+=a即为-12+-12=-24
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-26 10:33:36 | 显示全部楼层
  1. unsequenced modification and access to 'a'
复制代码


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

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

  1. int main(void) {
  2.     1139:       55                      pushq  %rbp
  3.     113a:       48 89 e5                movq   %rsp,%rbp
  4.     113d:       48 83 ec 10             subq   $0x10,%rsp
  5.     int a = 4;
  6.     1141:       c7 45 fc 04 00 00 00    movl   $0x4,-0x4(%rbp)
  7.     a += a -= a * a;
  8.     1148:       8b 45 fc                movl   -0x4(%rbp),%eax
  9.     114b:       0f af c0                imull  %eax,%eax
  10.     114e:       29 45 fc                subl   %eax,-0x4(%rbp)
  11.     1151:       8b 45 fc                movl   -0x4(%rbp),%eax
  12.     1154:       01 45 fc                addl   %eax,-0x4(%rbp)
  13.     printf("%d\n", a);
  14.     1157:       8b 45 fc                movl   -0x4(%rbp),%eax
  15.     115a:       89 c6                   movl   %eax,%esi
  16.     115c:       48 8d 05 a1 0e 00 00    leaq   0xea1(%rip),%rax        # 2004 <_IO_stdin_used+0x4>
  17.     1163:       48 89 c7                movq   %rax,%rdi
  18.     1166:       b8 00 00 00 00          movl   $0x0,%eax
  19.     116b:       e8 c0 fe ff ff          callq  1030 <printf@plt>
  20.     return 0;
  21.     1170:       b8 00 00 00 00          movl   $0x0,%eax
  22. }
  23.     1175:       c9                      leaveq
  24.     1176:       c3                      retq
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-26 16:08:50 | 显示全部楼层
这种题的主要作用就是告诉你,实操时尽量避免这样写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-26 18:58:18 | 显示全部楼层
-24
先算a-=a*a&#10145;&#65039;a = a - a * a&#10145;&#65039;a = -12
再算a += -12&#10145;&#65039;a = a + (-12)&#10145;&#65039;a = -24
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-29 15:42:38 | 显示全部楼层
就是c语言程序运行的时候是按从右向左
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-4 20:18:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 高山 于 2022-11-4 20:20 编辑
  1. #include<iostream>
  2. using namespace std;
  3. int main(){
  4.         int n=4;
  5.         n+=n-=n*n;
  6.         cout<<n<<endl;
  7.         return 0;
  8. }
复制代码

实际运行效果:
黑灰.png
答案是-24
能不能设置最佳答案?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 08:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表