sra(décalage à droite de l'arithmétique) vs srl (décalage à droite logique)
Veuillez jeter un oeil à ces deux morceaux de pseudo-code de l'assembly:
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
dans le premier cas, la sortie est:
212
13
13
dans le dernier est:
-212
107374...
-14
Mais ne fallait pas : sra (-53) = - (srl 53) ?
Besoins
R-Non, c'est juste quelque chose que je n'ai pas correctement
homework
tag ?R-Non, c'est juste quelque chose que je n'ai pas correctement
OriginalL'auteur user591931 | 2011-06-07
Vous devez vous connecter pour publier un commentaire.
Car la des bits supplémentaires sont simplement supprimés pour des résultats positifs et négatifs, le résultat est toujours arrondi vers le bas si vous affichez le changement comme une division.
Merci,je pense que ça répond à ma question.
OriginalL'auteur ikegami
La réponse concerne la notation en complément à deux. Le but de
sra
est de soutenir les nombres négatifs représentés en complément à deux. Le bit le plus significatif, qui est un si la valeur est négative, est doublé lorsqu'il est décalé à droite dans la "arithmétique" de la mode.Sur votre 32-bit x86, ce qui signifie:
Je suppose que la chose à réaliser est que, en complément à deux, le négatif d'un nombre n'est pas l'inversion de tous les bits du nombre -- c'est l'inversion de tous les bits, puis l'ajout de 1 à ce nombre. Considérer:
Pas:
Qui donnerait:
En d'autres termes, il n'y a pas de "zéro négatif" en complément à deux. Zéro prend de la place dans le domaine considéré "signe positif" en raison de la haute bit est égal à zéro.
Il semble que vous êtes en train de dire
sra(-N,2)
n'est jamais égal à-srl(N,2)
pour certains positif N, mais ce n'est pas toujours le cas.sra(-76,2) = -srl(76,2)
parce que76
a2^2
pour le facteur.OriginalL'auteur Heath Hunnicutt