复习-移位运算实现乘法和除法

近期在学习cup运算原理时,了解到arm无法支持“➗”运算,除法只能使用向右移位来实现,这里介绍一下移位运算的具体实现。本着讲明白的目的,这里我将尽量写的细节,希望对各位读者有所帮助。

一、准备

1.原码、反码、补码

原码

        原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。符号位为0则表示为正数,符号位为1则表示为负数。

如:

        6的原码为0000 0110 

        -6的原码为1000 0110

原码是人脑最容易理解和计算的表示方式。

反码

反码的表示方法是:

        正数的反码是其本身;

        负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

          6的原码为0000 0110 反码为 0000 0110

        -6的原码为1000 0110 反码为 1111 1001

可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值。通常要将其转换成原码再计算。

补码

补码的表示方法是:

        正数的补码就是其本身;

        负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)

         6的原码为0000 0110 反码为 0000 0110 补码为 0000 0110

        -6的原码为1000 0110 反码为 1111 1001 补码为 1111 1010

对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码再计算其数值。

2. 反码与补码的转换

        在做运算时我经常在这个转换中出问题,我这里给出一张图便于直观的展示这个转换的关系。

 有图可以看出,反码转化为补码要末位+1,补码转化为反码要末位-1

好了,我们的准备阶段结束了,这些基础知识已经够我们完成目标任务了。

二、向左移位

        1. 正数

                以6为例,进行左移操作,具体操作如下图所示

                

         这里向左移动一位变成原来的两倍,向左移动两位变成原来的四倍

                        即 6<<1 = 12 = 6 x 2

                            6<<2 = 24 = 6 x 2 x 2        

        于是得出结论,m << n = m x 

 2. 负数

以-6和-8为例,进行左移操作,具体操作如下图所示

 也是证明了上面给出的公式

                 即m << n = m x 

三、向右移位

        1. 正数

  以6为例,进行右移操作,具体操作如下图所示:

 由此可知,右移一位表示除以2

        2. 负数

以-6和-8为例,进行左移操作,具体操作如下图所示:

 

 这里向右移动一位变成原来的二分之一,向右移动两位变成原来的四分之一

                        即 6>>1 = 3 = 6 / 2

                            6>>2 = 24 = (6 / 2) / 2        

        于是得出结论,m >> n = m ÷ 

当然除法还有一种与奇数相除的情况,

        一些书上的说法是舍去小数部分,但是这种说法只适用于正数的情况。

        在我看来,应该是用于向下取整,比如说,13/2=6,-13/2=-7

于此我们的介绍结束了,希望对各位读者有所帮助,也希望各位多多批评。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值