我正在尝试手工计算这些位移位操作,但我不确定如何去做。ARM指令如下:
ldr r0, =0XCAFEBABE
asr r0, r0, 9
我知道asr意味着算术右移,它等同于将数字除以2或乘以2。
另外两个我不知道该怎么做的是:
ldr r0, =0XCAFEBABE
lsl r0, r0, 11
对于这个例子,我知道如何做逻辑左移,但我不确定移位11位是如何工作的。
最后,
ldr r0, =0XCAFEBABE
lsr r0, r0, 6
对于这个问题,我不确定什么是逻辑右移。
发布于 2018-06-10 01:35:50
逻辑移位和算术移位的不同之处在于后者保留了最高位。
算术移位的这种行为对于有符号数字在中不改变符号很有用。如果最高位为1
(表示负数),则在右移位(asr
)中移位1
,在左移位(asl
)中将最高位锁定在1
。如果最高位为0
,则该0
(表示正数)被锁定,且0
从左移入。
在逻辑移位中,0
在两个方向(lsl
和lsr
)都被移入。这对于用于无余数的乘法和除法的无符号数,或用于位流操作非常有用。
现在,为了解决你的任务:
CAFEBABE
转换为逻辑移位的位,或将位表示的算术转换为十六进制的1https://stackoverflow.com/questions/50776778
复制相似问题