问题描述:

           将N1,N2,N3组合成N4,且能从N4中又能推出N1,N2,N3.

算法实现:

           假设N1,为a位,N2为b位,N3为c位。那么将这三个数组合成一数就需要知道每个十进制数存储的大小,也就是它们转换为二进制数后的位数,具体求位数请参考本人的另一篇日志(栈的应用---十进制数转换为其他进制的数)。在这里分别假设N1,N2,N3转换为二进制后的二进制的位数为n1,n2,n3,那么要将这三个数组合成一个数,就需要n1+n2+n3这么大的存储空间。下列是转换为一个数的算法:

          N4=N1<<(n2+n3)|N2<<(n3)|N3

  将上述的N4转换为响应的数的算法为:

           N3=N4&(2exp(n3)-1)

           N2=(N4>>n3)&(2exp(n2)-1)

           N1=(N4>>n2+n3)&(2exp(n1)-1)

此算法的应用:

     此算法简单易实现,应用面非常广,比如在学生管理系统中可以见学生的编号和学生年级和学院编号组合成一个编号。也可以将N1,N2,N3的关系包含在N4里面表示一类数有什么特性,比如N3有特性N1,N2等等