请看一下这两段伪汇编代码:
1)
li $t0,53
sll $t1,$t0,2
srl $t2,$t0,2
sra $t3,$t0,2
print $t1
print $t2
print $t3
2)
li $t0,-53
sll $t1,$t0,2
srl $t2,$t0,2
sra $t3,$t0,2
print $t1
print $t2
print $t3
在第一种情况下,输出是:
212
13
13
后者是:
-212
107374...
-14
但不应该: sra (-53) = - (srl 53) 吗?
-53 = 1111111111001011
sra 2
1111111111110010(11) = -14
^^ ^^
sign dropped
extension
由于对于正结果和负结果都会简单地删除额外的位,因此如果将移位视为除法,则结果始终向下舍入。
53 sra 2 = floor( 53 / 2^2) = floor( 13.25) = 13
-53 sra 2 = floor(-53 / 2^2) = floor(-13.25) = -14
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)