如何实现长长整型(>32位)

ma100 2004-09-20 10:44:27
如题,
我的想法是建立一个结构体,把一个数分成高位和低位,然后通过重载运算符实现。
这样做有可能是40位,48位或是64位的,肯定有个数据是long/unsigned long行的

如果把高位用long表示,低位用char/short表示的话,容易解决加法和乘法的进位(运算用long)
如果把低位用long表示,表达更简洁(小的数可以不写高位)

如果遇到负数,高位,低位,还是都是负数表示呢
另外,是否要用到unsigned

以上是我用结构体的想法,不知道大家在处理大数的时候怎么做,如果有人和我说的一样,能不能把代码帖出来

...全文
457 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcj2002 2004-09-21
  • 打赏
  • 举报
回复
__int64

如果〉64位可以用int数组,每位存储数的一位
imoldcat 2004-09-21
  • 打赏
  • 举报
回复
去年的一个作业里,也有这个题目,当时我是用一个数组来做的,可以使char[],也可以是int[]。每一个数组的元素是一位数。以这个数组作为成员的类,再进行一些运算符重载。可以尝试一下。去年做的是100位的大数。
如果按照你的说法,按照两个部分来实现,初步的感觉,位数是要受到限制的,不利于代码的复用。没有细细的想下去。
nabie 2004-09-21
  • 打赏
  • 举报
回复
用 long long 类型,VC6 的话用 __int64 类型,这些都是 64 位的。虽然 long long 类型是标准的内置类型,可惜 VC6 不支持。
goodluckyxl 2004-09-21
  • 打赏
  • 举报
回复
前天中午还想过这个问题
我想用char来实现
因为大数表示也是有问题的
做运算都要自定义
用的手工的算法慢慢记录值

idleguy 2004-09-21
  • 打赏
  • 举报
回复
处理大数字?嗯,我用__int64....
fengfeng1982 2004-09-21
  • 打赏
  • 举报
回复
可以用数组吧,n位都可以
daylove 2004-09-21
  • 打赏
  • 举报
回复
实际没有用过,不过我想继续关注,楼上的使用二进制来表示存在精度问题吗?
new_moon_lake 2004-09-21
  • 打赏
  • 举报
回复
用 AMD 64位处理器 编译
北极猩猩 2004-09-21
  • 打赏
  • 举报
回复
最好的性能还是完全靠二进制实现,这样在空间上最紧凑,时间上也更好,只是实现起来困难一些不那么直观吧了
双杯献酒 2004-09-21
  • 打赏
  • 举报
回复
DevC支持long long
IDqq 2004-09-21
  • 打赏
  • 举报
回复
用位域可以么
ma100 2004-09-21
  • 打赏
  • 举报
回复
我想自己写,不用__int64(我用的是BC3.1,不支持)
ccj200308053 2004-09-21
  • 打赏
  • 举报
回复
up
短歌如风 2004-09-21
  • 打赏
  • 举报
回复
long long 类型不是标准类型。

这里VC和BC的处理是比较好的,它们都用__int64这种关键字,由于有两个前导下划线,大家一看就知道是非标准内容。
zhangfjj 2004-09-20
  • 打赏
  • 举报
回复
没做过,但想了一下,
象数据的提升是不是有点共用体的味道,
可以试着在你的结构体里中加一个共用体数据成员。
仅仅是一个设想,没有付诸实现。呵呵。。。
短歌如风 2004-09-20
  • 打赏
  • 举报
回复
我实现高精度整数时选择的是实现16进制整数,用一个字节表示一个16进制位。如果有的字节的数值在16以上则属于“非规格数”,要进行规格化——把超出的部分加到高字节去。

然后实现同符号加和同符减,再用这两个操作实现普通的加减。
乘法操作实现时先求出被乘数乘1-15的积(其实是在用到时才去求,但这样说简明点),然后用加法实现。
除法是用加减乘法实现的试商法。

之所以选择16制而不是更大是为了照顾乘法运算。如果用int为基本单位实现65536进制的话在实现乘法时要求的就不是被乘数乘1-15而是乘1-65535了。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧