用标准C语言,计算机能帮你算的最大的数字也就限于2的32次方.超出了这个范围,就会溢出了.但是密码算法里很多算法,如著名的RSA,就要求要计算2的1024次方甚至更大的数量级的数字.而且,解决了这个问题也可以对计算机的理解有帮助.
首先,先看一下加法.
有两个思路可以参考:
如果有两个占用8个字节的内存单元要进行加法运算,也就是可以表示成2个int型元素组成的数组要进行加法运算,如果按照数组元素进行运算的话,那么低位的进行运算之后溢出了,那怎么办,关键就在于如何得知溢出.如果每次进行的运算不是2的32次方,而是小于2的32次方,那么溢出之后就可以知道.所以,我们只需要利用两个int型的临时空间,每次分别将要进行加法运算的两个大数字放进去24位,为什么要放24位,放31位不是更节省吗?但是31位不方便运算.所以一次就放3个字节进去.然后进行计算机提供的加法运算,之后来判断2个有效位为24位的数字进行运算的结果的第25位,如果该位为1,则表示运算溢出,否则无溢出.这种方法一般般,不好也不坏.呵呵.
|