举例说明逻辑左移、算术左移、逻辑右移、算术右移

 前言

首先需要明确几个概念:

1.计算机操作的都是补码。

2.正数的补码和原码相同,负数的补码等于原码取反后+1.

3.需要先确定位数(如8位、16位、32位),因为有可能会出现溢出的情况。

 

逻辑左移

 逻辑左移是不考虑符号的左移操作。它用于对无符号整数进行左移。

在逻辑左移中,所有位都向左移动,不考虑符号位。

逻辑左移将左边空出的位用0填充。

例如原始:00000010 ----- 2

左移二位:00000100 ----- 4

 

算术左移

算术左移是带符号左移操作。它用于对带符号整数进行左移,保持数的符号位不变。

在算术左移中,最高位(符号位)的值会在左移时保持不变。左移后的空位用零填充。

在不溢出的情况下相当于乘以2。 

算术左移与逻辑左移相似,但对于有符号整数,它保留了符号位。 

例如原始:11111110 ----- -2

左移一位:11111100 ----- -4

注意:在不溢出的前提下(如8位的范围是-128-127),算术右移和逻辑右移的结果一样。

逻辑右移

逻辑右移是不考虑符号位的右移操作。它用于对无符号整数进行右移。

逻辑右移中,所有位都向右移动,不考虑符号位

最高位(符号位)在逻辑右移时被填充为0。

逻辑右移通常用于无符号数值的无损压缩。

逻辑右移将右边空出的位用0填充。

例如原始:11111100 ----- -4

右移一位:01111110 ----- 126

可见逻辑右移会改变负数

 

算术右移

算术右移是带符号右移操作。它用于对带符号整数进行右移,保持数的符号位不变。

在算术右移中,最高位(符号位)的值会在右移时保持不变。右移后的空位用符号位填充。

算术右移通常用于有符号整数的操作,以保持符号的正确性。

在不溢出的情况下相当于除以2。

算术右移与逻辑右移相似,但对于有符号整数,它保留了符号位

例如原始:11111100 ----- -4

右移一位:11111110 ----- -2

 

举例说明 

通过这张图可以很直观地看出很多关系,比如不溢出的情况下算术左移一位相当于乘以2、不溢出的情况下算术右移相当于乘以2、负数的原码相当于正数的原码将符号数改为1、负数的原码取反+1得到补码、正数的原码反码补码均相等......

 (by 归忆)

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

归忆_AC

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

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

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

打赏作者

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

抵扣说明:

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

余额充值