C51里如何实现处理 比 long 型更大的数?

merryimage   2008-3-27 16:24 楼主
我要操作的数据大于 0XFFFF FFFF了请问在C51里如何解决这个问题?

回复评论 (16)

float
点赞  2008-3-27 16:38
引用: 引用 1 楼 zhujinqiang 的回复:
float

太不负责了,LONG 都装不下 float的怎么可以?何况我是 整数,非浮点数
点赞  2008-3-27 16:47
C51里如何实现 5字节长度的无符号整型数加减乘除?
点赞  2008-3-27 16:49
1。自己做数据类型的处理,把一切都看成0和1
2。用字符来表示(其实也是另一种自己处理)

C51里如何实现 5字节长度的无符号整型数加减乘除?

自己写,呵呵

。。。

相信在学C或是JAVA的时候,都会有一个技巧叫:大数运算

LZ可以试试

点赞  2008-3-27 18:00
楼主不要激动,
确实float和unsigned long、signed long都是4字节,
但是float牺牲了精度,扩大了表数范围。
点赞  2008-3-28 12:30
希望楼主讲讲更详细你的需求,多大数?要什么结果?

如果楼主需要处理>NN亿的数据,而且执着于个/十位的精确,就当俺前面没说吧。
点赞  2008-3-28 12:36
希望楼主讲讲更详细你的需求,多大数?要什么结果?

如果楼主需要处理>NN亿的数据,而且执着于个/十位的精确,就当俺前面没说吧
===============================================================
首先谢谢你的帮助!
我要存储的数据类型是无符号整数,只是现在用 unsigned long 型的数据类型装不下了,至少需要扩展一个字节,而我希望有个简单的方法来实现,系统原有的 unsigned long 类型也可以用。 实际上就是当 unsigned long 型的数据溢出后怎么检测到?这样我就可以自己把进位存入另外的字节。
汇编里比较容易实现,但我又不想为这个问题而把整个程序用汇编重写一便(痛苦得要死...)
点赞  2008-3-29 09:36
用单片机进行数据运算?
点赞  2008-3-29 17:33
自己写,
点赞  2008-3-29 20:55
类似这样,这是以前俺写的一个8位长整数转化成字符串的程序

  1. void
  2. hextodec( unsigned char *hex, unsigned char *dec, unsigned char length, unsigned char displength )
  3. {
  4.         unsigned char xdata temp[ 23 ];
  5.         unsigned char xdata j, k;
  6.         unsigned char xdata this4;
  7.         char xdata i, t;

  8.         memset( temp, 0, 22 );
  9.        
  10.         for( i = length - 1; i >= 0; i-- )
  11.                 for( j = 0; j < 2; j++ )
  12.                 {
  13.                         this4 = *( hex + i ) >> ( ( 1 -j ) * 4 ) & 0x0f;
  14.                         //得到一个4位的数
  15.                         for( k = 0; k < 22; k++ )
  16.                                 temp[ k ] *= 16;        //扩大16倍
  17.                         for( k = 0; k < 22; k++ )
  18.                         {        //进位
  19.                                 temp[ k + 1 ] += temp[ k ] / 10;
  20.                                 temp[ k ] -= temp[ k ] / 10 * 10;
  21.                         }
  22.                         temp[ 0 ] += this4;
  23.                         for( k = 0; k < 22; k++ )
  24.                         {        //进位
  25.                                 temp[ k + 1 ] += temp[ k ] / 10;
  26.                                 temp[ k ] -= temp[ k ] / 10 * 10;
  27.                         }
  28.                 }
  29.         //搞定了
  30.         memset( dec, 0, displength + 1 );
  31.         for( t = displength; t >= 0; t-- )
  32.                 *( dec + displength - t - 1 ) = temp[ t ] + 48;
  33.         i = 0;
  34.         while( *( dec + i ) == '0' && ( i < displength - 1 ) )
  35.         {
  36.                 *( dec + i ) = ' ';
  37.                 i++;
  38.         }
  39. }
点赞  2008-3-29 20:58
我是要实现5字节长的2进制数(也就是40位2进制)加法,减法和除法,
点赞  2008-3-29 21:05
请各位给个思路先,实际上也就是2进制运算(我要在C51里实现)
点赞  2008-3-29 21:08
同意5楼,二楼理解有误。。。
点赞  2008-3-30 08:53
深圳程序员QQ群联盟成立两年多,拥有三十个以上的QQ群,人数达二千多人,有30%以上的成员的经验丰富的老手,包括国内外顶级大公司的成员(如微软、IBM,SUN,华为)、国内著名高校和研究院成员,和有丰富实践经验的高级程序,还有少数女程序员。现推介如下QQ群,如有兴趣速速加入:深程高级群:17538442c++:15195967 .NET:12203296 mobile:31501597嵌入式:37489763 JAVA:4247660   
——————————————————————————————————————————  
希望大家不要认为群能给你带来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到一点信息或许能带来一点启发。
点赞  2008-3-31 11:10
10楼的具有借鉴意义
点赞  2008-3-31 17:02
我在处理串口通讯程序里使用过分解法,就是吧16位数据分割成4组数据发送,然后在每一组数据高四位分别加0x0001,0x0011,0x0111,0x1111
点赞  2017-12-9 20:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复