4368|2

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ARM下的64位加法运算? [复制链接]

高手们:

   在ARM中,哪个能写一个这个程序:  有一个数:123456789ABCDFE    又有一个数987654321FEDCBA   这两个数如何比较大小?
   
此帖出自ARM技术论坛

最新回复

我看了一下,感觉没好复杂嘛,,怎么你写出来的就成这样以呢?   我想用是的汇编语言,还没想过用C语言哦 还是谢谢啊  详情 回复 发表于 2009-5-30 22:21
点赞 关注
 

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

  1. /*Date Define*/
  2. #define SIZE_OF_LARGENUM 3    //宏定义,用于定义LARGENUM可计算的位数SIZE_OF_LARGENUM×32bit
  3. typedef int UINT32;
  4. typedef char BOOL;

  5. typedef struct {
  6.     BOOL    fNegative;
  7.     UINT32  u[SIZE_OF_LARGENUM];

  8. } LARGENUM;

  9. LARGENUM Num1, Num2;



  10. /*
  11. //Compare the Num1 and Num2
  12. //Note: the compare ignore the signs
  13. //if Num1 greater than Num2 return TRUE
  14. //if Num2 greater than Num1 return FALSE
  15. */
  16. BOOL
  17. LargeNumCompare(
  18.     PLARGENUM   pNum1,
  19.     PLARGENUM   pNum2
  20.     )
  21. {
  22.     int i;

  23.     for(i=SIZE_OF_LARGENUM-1; i>=0; i--){
  24.         if(pNum1->u.s32.u[i] > pNum2->u.s32.u[i]){
  25.             return TRUE;
  26.         } else if(pNum1->u.s32.u[i] < pNum2->u.s32.u[i]){
  27.             return FALSE;
  28.         }
  29.     }
  30.     return FALSE;
  31. }

  32. int main()
  33. {
  34.     /*Set Num1 of 0x123456789ABCDFE*/
  35.     Num1.fNegtive = FALSE;    //FALSE means the Num1 is not negtive number
  36.     Num1.u[0] = 0x9ABCDFEl;
  37.     Num1.u[1] = 0x12345678l;

  38.     /*Set Num1 of 0x987654321FEDCBA*/
  39.     Num2.fNegtive = FALSE;    //FALSE means the Num1 is not negtive number
  40.     Num2.u[0] = 1FEDCBAl;
  41.     Num2.u[1] = 0x98765432l;

  42.     if ( LargeNumCompare( &Num1,&Num2 ) ){
  43.         //Num1 is greater than Num2
  44.         //Add the code...
  45.     }
  46.     else{
  47.         //Num2 is greater than Num1
  48.         //Add the code...
  49.     }
  50. }

复制代码

上面的代码就可以了,只不过没有比较由符号的情况,要考虑由符号的情况,在原来函数的基础上考虑符号即可,原函数相当于只考虑了符号相同且均为正数,还剩下符号相反,符号相同为负数,原理类似。

只需考虑好数字的拼接就可以了,类似的可以做加减乘除运算;
上面的函数基本计算单位为32位,如果数字位数更大的话,比如两个128位数比较,只需修改SIZE_OF_LARGENUM宏即可,128/32= 4;
其实这就是个迭代运算。

有用的话,请加分,呵呵
此帖出自ARM技术论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我看了一下,感觉没好复杂嘛,,怎么你写出来的就成这样以呢?
  我想用是的汇编语言,还没想过用C语言哦
还是谢谢啊
此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表