SHL SHR, SAL SAR, ROL ROR

本文详细解析了逻辑移动(针对无符号数)与算术移动(针对有符号数)的区别及应用场景,包括左移与右移操作,并通过具体示例说明了它们如何影响数值。此外,还介绍了循环位移的概念及其在汇编语言中的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//____逻辑移动是针对无符号数的______________________________________________
逻辑左移 SHL  逻辑右移 SHR: unsigned int i = 0x1234; unsigned int j = 0; j = i >> 8;    //右移, 执行后 j = 0x12; j = i << 8;    //左移, 执行后 j = 0x123400;
//_____算术移动是针对有符号数的_____________________________________________
算术左移  SAL  算术右移 SAR: int i = 0x88332211; int j = 0; j = i << 8;  //左移, 执行后 j = 0x33221100; 与逻辑左移相同. j = i >> 8;  //右移, 执行后 j = FF883322; 移进来的位, 全置1. 
//_____异同_______________________________________________________________ 相同之处: SHL = SAL;  当有符号数为正数时 SAR = SHR高位用0填补. 不同之处: 当有符号数为负数时, SAR 高位用1填补. 
//_____循环位移___________________________________________________________ 循环位移只有汇编指令, C语言中没有相应描述. 所以只能用汇编指令编写程序 int i = 0x77665544; __asm {     ROR  i,  8   //执行后, i = 0x44776655; } 
注意: ROR, ROL会把符号位也移动起来, 即把有符号数当成无符号数处理. 这很可怕, 会改变有符号数的正负号, 呵呵.

转载于:https://www.cnblogs.com/goalpower/p/4032590.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值