c - sarq 和 shrq 的区别
问题描述
名称:值
%rdi: 0x6
%rax: 0x4
sarq 和 shrq 有什么区别?
如果我有 sarq $1, %rdi 这个值会怎样?shrq %rdi 是做什么的?
解决方案
sarq
是四字的算术右移,shrq
是四字的逻辑右移。不同之处在于算术移位将用最左边的位(也称为符号位)填充空位,而逻辑右移只会用 0 填充它们。
对于正数,它们的行为是相同的。对于负数,它们的行为完全不同。
例如,假设%rax = 16 (0x0000 0000 0000 0010)
. 两者sar $4, %rax
和shrq $4, %rax
都将设置%rax
为 1 ( 0x0000 0000 0000 0001
)。
现在如果%rax = -16 (0xffff ffff ffff fff0)
. sar $4, %rax
将设置%rax
为 -1 ( 0xffff ffff ffff ffff
),而shr $4, %rax
将设置%rax
为 1152921504606846975 ( 0x0fff ffff ffff ffff
)。
使用哪条指令取决于数据类型和您想要做什么。C>>
运算符sar
用于有符号数据类型和shr
无符号数据类型。
推荐阅读
- typescript - 从 webview 向扩展发送消息
- google-apps-script - 如何将 Google 照片中的一张图片添加到 HTML 模板以发送电子邮件?
- api - Pinterest 开发者 API v3 应用程序仍在等待中
- html - CSS中的中心页脚
- excel - ListBox(用户窗体)VBA中的多列
- pandas - 熊猫根据条件合并和更新,而不重命名列
- django - 将图像提供给 Django 模板
- asp.net - 任何人都知道为什么邮递员从不在我的 sql 表上的字段返回空值?
- python - 从 pandas 数据框中选择特定行
- c - 是否有在 C 中返回条件整数(错误代码)的简写?这有点类似于 Go