64位长整数的加减法

已锁定

yanxiao

版主

  • 帖子

    12157
  • 精华

    47
  • 被关注

    184

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

64位长整数的加减法

2439

4

2017-10-02 13:37:59

64位长整数的加减法

S7200和200smart,只有16位、32位的整数加减指令。

8位的加减,可以用16位的指令,然后只截取8位的结果;

24位的加减,可以使用32位的指令,然后只截取24位的结果。

大于32位的整数加减,则没有现成的指令可用,需要编程实现。

国庆假期有空,整理了一下64位的加减法的实现办法。有了64位,中间的40位、48位、56位,都可以实现了。

方法,分无符号和有符号两种,但是都是基于系统提供的32位有符号加减指令实现。

一、无符号和有符号的统一

200的整数加减指令是有符号的,编码规则采用补码法。补码法的好处,是可以使用无符号数的加减指令,来实现有符号数的加减,也就是说,有符号和无符号的加减指令,计算法则是一样的,所不同者,只是数值的解释不同。

为叙述方便,以3位二进位长的整数为例。最高有效位(MSB)表示符号:

二进制编码:100 101 110 111 000 001 010 011

十进数数值:-4  -3  -2  -1  0   1   2   3

注意,2#100不是-0。

有符号:(-4)+(1)=-3,二进制:(100)+(001)=101(=-3)

无符号:(4)+(1)=5,二进制:(100)+(001)=101(=5)

有符号:(-1)+(1)=0,二进制:(111)+(001)=000(溢出)

无符号:(7)+(1)=0,二进制:(111)+(001)=000(溢出)

可以自行试一下减法。

所以,无符号数,可以采用有符号数的指令进行运算,把结果按无符号解释,就可以了。

反之亦然。


二、64位无符号数的加减法

64位分高32位L64H和L64L,按计算法则,先算低位先算。低位计算时,会产生进位和借位,一同参与高位的计算。

所以,长整数的计算关键,就是处理进位和借位。


2.1 加法

    把L64L的最高有效位标为MSBL,加数的称为MSBL1,被加数的称为MSBL2,和称为MSBL3

    若 (MSBL1) or (MSBL2) = 0,也就是全为0,肯定没有进位产生。

    若 (MSBL1) and (MSBL2) = 1,也就是全为1,则肯定有进位产生了。

    若 ((MSBL1) or (MSBL2) = 1) and (MSBL3=0),也就是加数的MSB至少有一个1,但是和的MSB=0,也表示有进位产生。


2.2 减法

    A-B=A+(-B)

    所以,减法可以用加法做。

    -B,按补码的编码规则,是将B的二进位取反,然后加1。

    -B=INV(B)+1


三、64位有符号数的加减法

    有符号数的加减法,规则同无符号数。只要有显示或应用时,把数解释成有符号的就行了。


这是理论。再写程序。


64位长整数的加减法 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有8971条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。