問題描述:
將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等等