逻辑移位与算数移位的区别实例分析

逻辑移位与算数移位的区别实例分析

本文主要介绍逻辑移位与算数移位的区别,采用了一些实例进行进一步说明,通俗易懂!!

右移

逻辑右移和算数右移是位移操作中的两种不同方式,它们在处理带符号整数时有不同的行为。以下是它们的区别以及示例:

1. 逻辑右移

  • 在逻辑右移中,最高位(符号位)不会影响其他位的移动,它仅仅被当做普通位一样右移,而在左侧添加0。
  • 逻辑右移适用于无符号整数或希望将带符号整数当作无符号整数进行处理的情况。

示例:
对于无符号整数(例如,uint8_t),逻辑右移不会考虑符号位,只是将每个位向右移动,并在左侧添加0。

0b11011010 >> 2 = 0b00110110

2. 算数右移

  • 在算数右移中,最高位(符号位)保持不变,并且右移操作会在左侧添加与符号位相同的位。这意味着正数右移时,在左侧添加0,而负数右移时,在左侧添加1。
  • 算数右移用于保持带符号整数的符号和值的完整性。

示例:
对于带符号整数(例如,int8_t),算数右移会考虑符号位,并在左侧添加与符号位相同的位。

0b11011010 >> 2 = 0b11110110

这里,正数 0b11011010 右移2位,添加0,得到 0b00110110。而负数 0b11011010 右移2位,添加1,得到 0b11110110

总结

  • 逻辑右移用于无符号整数或不考虑符号位的情况,它会在左侧添加0。
  • 算数右移用于带符号整数,保持符号位和值的完整性,它会在左侧添加与符号位相同的位。

左移

逻辑左移(Logical Left Shift)和算术左移(Arithmetic Left Shift)是位移操作,用于将二进制数向左移动指定的位数。它们的区别在于如何处理左侧空位的方式。

逻辑左移(Logical Left Shift)

  1. 原理

    • 逻辑左移将二进制数的所有位向左移动指定的位数,丢弃最左侧的位,并用0填充右侧的空位。
    • 这种操作适用于无符号整数,不考虑符号位,只关注数据位的位移。
  2. 示例

    原数:   11011010
    左移2位:01101000
    

算术左移(Arithmetic Left Shift)

  1. 原理

    • 算术左移将二进制数的所有位向左移动指定的位数,丢弃最左侧的位,并用0填充右侧的空位。
    • 这种操作适用于带符号整数,左移不会影响符号。
  2. 示例

    原数:   11011010
    左移2位:01101000
    

总结区别

  • 逻辑左移适用于无符号整数,不关心符号位,填充0。
  • 算术左移适用于带符号整数,左移不会影响符号,也会用0填充。

这两种左移操作通常用于数据的扩大(左移增加位数,结果变大)或者在某些计算中用于位运算。逻辑左移总是用0填充右侧,而算术左移会丢弃左侧的位,并用0填充右侧,符号位不会受到影响。


写在最后:
为个人学习时的记录,欢迎指正

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写的什么石山代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值