首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >执行位移位操作(asr、lsl、lsr)

执行位移位操作(asr、lsl、lsr)
EN

Stack Overflow用户
提问于 2018-06-10 01:20:41
回答 1查看 1.9K关注 0票数 0

我正在尝试手工计算这些位移位操作,但我不确定如何去做。ARM指令如下:

代码语言:javascript
运行
复制
ldr    r0, =0XCAFEBABE
asr    r0, r0, 9

我知道asr意味着算术右移,它等同于将数字除以2或乘以2。

另外两个我不知道该怎么做的是:

代码语言:javascript
运行
复制
ldr    r0, =0XCAFEBABE
lsl    r0, r0, 11

对于这个例子,我知道如何做逻辑左移,但我不确定移位11位是如何工作的。

最后,

代码语言:javascript
运行
复制
ldr    r0, =0XCAFEBABE
lsr    r0, r0, 6

对于这个问题,我不确定什么是逻辑右移。

EN

回答 1

Stack Overflow用户

发布于 2018-06-10 01:35:50

逻辑移位和算术移位的不同之处在于后者保留了最高位。

算术移位的这种行为对于有符号数字在中不改变符号很有用。如果最高位为1 (表示负数),则在右移位(asr)中移位1,在左移位(asl)中将最高位锁定在1。如果最高位为0,则该0 (表示正数)被锁定,且0从左移入。

在逻辑移位中,0在两个方向(lsllsr)都被移入。这对于用于无余数的乘法和除法的无符号数,或用于位流操作非常有用。

现在,为了解决你的任务:

  • 将十六进制值CAFEBABE转换为逻辑移位的位,或将位表示的算术转换为十六进制的1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50776778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档