y+=z--/++x 的讨论

遇到一个考试题目:
设x=1,y=2,z=3,则表达式y+=z- -/++x的值是()
A. 3 B. 3.5 C. 4 D. 5

一开始毫无头绪,后来看到答案明白了.

首先应是这样的:y+=(z- -/++x)把y+=后面的看成一个整体
然后 再考虑 z- -/++x 就是(z- -)/(++x)
z- - 先返回z 然后做自减运算
++x 先做自增运算 然后返回x
即:
y+=(3/2)
此时,z=2 x=2
3/2 都为int类型 故结果为1
即y+=1
y=3
另外x的值为2,z的值也为2

C语言运行结果:这里写图片描述
表达式的值为3(即y的值)

从翻译的MIPS汇编语言我们可以发现
这里写图片描述

y+=z- -/++x

mipsasm
main:
addiu $sp,$sp,-32
sw $fp,28($sp)
move $fp,$sp
li $2,1 # 0x1 赋值x=1
sw $2,8($fp)
li $2,2 # 0x2 赋值y=2
sw $2,12($fp)
li $2,3 # 0x3 赋值z=3
sw $2,16($fp)
lw $2,16($fp) #取z=3的值给$2 , z- - 第一步返回z值
nop
addiu $3,$2,-1 #z- - 第二步 自减
sw $3,16($fp)
lw $3,8($fp)
nop
addiu $3,$3,1 #x++运算 $3自增
sw $3,8($fp)
lw $3,8($fp)
nop
bne $3,$0,1f
div $0,$2,$3 #除法运算$3=$2/$3
break 7
1:
mfhi $2
mflo $3
lw $2,12($fp) #读取y值
nop
addu $2,$2,$3 #y+=$3 至此y+=z--/++x运算结束
sw $2,12($fp) #回写y值
move $2,$0
move $sp,$fp
lw $fp,28($sp)
addiu $sp,$sp,32
j $31
nop

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值