千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 大整数类型和一般的整数类型相比各有什么优劣?

大整数类型和一般的整数类型相比各有什么优劣?

来源:千锋教育
发布人:xqq
时间: 2023-10-11 06:22:59 1696976579

一、大整数类型和一般的整数类型相比

大整数类型和一般的整数类型相比优点是不会溢出,能表示任意长度的数字做各种精度的运算。

缺点是没有直接的类型运算支持,必须像人类计算一样按位数分别计算进行借位/进位操作。。好在现在常用语言比如Java已经内置大数库,不用重复造轮子了。硬件:不直接支持运算,效率低下。现在的主流计算机通常都是以寄存器为单位进行运算,在这种架构上实现大数运算一般都要从内存读取后操作,如果存在大量随机读写大数的情况,性能甚至可能下降几十到上百倍。

普通整数:优缺点刚好和大整数反过来,简单快,但是会存在溢出和精度丢失问题。

为什么不做自动类型提升?因为很难做啊。首先要知道溢出是一个运行时才能完全确定的问题,那么:对于类型确定的语言根本做不到,因为类型在编译期间已经确定,除非重新设计一个功能更强大的编译器。对于无类型的语言,也许可以通过把所有数都存在内存并且设置长度与类型标志位的方法来达到类似的效果,但是这样程序效率一定会大大降低,并且解释器会变得更复杂,同时会引入一套新的数据解析规则,很多库也许都需要重写。

既然要做无限制的提升,那么数据就不能放在寄存器中,同时还必须设计一套能够在自动提升/降低时能够自动申请/释放内存的方案,同时还必须兼顾性能……

综上所述,具备设计开发强于GCC/LLVM等静态编译器,开发高效解释语言库,能完美解决Java的GC问题的人,才能解决这个问题。

延伸阅读:

二、大整数BigInteger

import java.math.BigInteger;

首先,对于初始化则不像基本类型包装这块讲着3种方式,这里只剩下valueOf() 可以对其初始化。

接着,大整数变量不能使用算术运算符,需要通过以下方法进行运算:

add():取代了加法运算符“+”;

subtract():取代了减法运算符“-”;

multiply():取代了乘法运算符“*”;

divide():取代了除法运算符“/”;

remainder():取代了取余运算符“%”;

negate():取代了负号运算符“-”。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT