ARM下的64位加法运算?

kellycan   2009-5-25 18:13 楼主
高手们:

   在ARM中,哪个能写一个这个程序:  有一个数:123456789ABCDFE    又有一个数987654321FEDCBA   这两个数如何比较大小?
   

回复评论 (2)


  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;
其实这就是个迭代运算。

有用的话,请加分,呵呵
点赞  2009-5-25 22:44
我看了一下,感觉没好复杂嘛,,怎么你写出来的就成这样以呢?
  我想用是的汇编语言,还没想过用C语言哦
还是谢谢啊
点赞  2009-5-30 22:21
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复