很久以前看到瑪雅的數學的特殊的進製演算法,又聽同學說過進製上有使用e和pi作為進製的,於是比較好奇的在老婆幫助選數後作了乙個對1.8進製的小研究。其實說1.8進製和其它特殊進制法在日常生活中都不會用到,但是對於加密機制是乙個新的機遇,我們可以通過對密碼進行處理得到其對應的某些數字,然後將這些我們所熟悉的十進位制數字轉換為1.8進製或其它特殊進製,這樣能起到乙個簡單加密的效果。
顧名思義,1.8進製就是每逢1.8進製的進製。乙個十進位制數仍然可以用短除法求取1.8進製的數,例如,十進位制中的23在轉換為1.8進製時的過程如下(這裡我們允許餘數為小數):
23/1.8 商12 餘1.4
12/1.8 商6 餘1.2
6/1.8 商3 餘0.6
3/1.8 商1 餘1.2
1/1.8 商0 餘1.0
這時我們發現,在運算過程中餘數會出現從0.1到1.7之間的小數或整數,又由於短除時我們發現,只有十進位制數字0和1在1.8進製中會是其本身,所以我們利用十六進製制的思想對每個小數所對應的符號進行如下規定:
0-0 0.1-2 0.2-3 0.3-4 0.4-5 0.5-6 0.6-7 0.7-8 0.8-9 0.9-a 1.0-1 1.1-b 1.2-c 1.3-d 1.4-e 1.5-f 1.6-g 1.7-h
這樣,當我重新做上述運算的時候,就可以用字母代替小數:
23/1.8 商12 餘e
12/1.8 商6 餘c
6/1.8 商3 餘7
3/1.8 商1 餘c
1/1.8 商0 餘1
這樣,對於1.8進製,其23可表示為01c7ce。
當然,1.8進製數在轉換成十進位制數的時候仍然可以採用與二進位制和十六進製制相同的方法,即在1.8進製表示法中,每個位的位權都是1.8的冪數。例如:我們在將01c7ce轉換為十進位制數的時候按照上面短除的反運算,可以得出式子(1*1.8
4)+(1.2*1.8
3)+(0.6*1.8
2)+(1.2*1.8
1)+(1.4*1.8
0)=23。所以我們可以推出重要的對於1個n位1.8進製數轉換為十進位制數的轉換公式:dec=(d
n*1.8
n-1)+(d
n-1*1.8
n-2)+...+(d
2*1.8
1)+(d
1*1.8
0)要說明的是,一般的,我們用把0和1放在首位的方法表示正負數的概念,且這一位只表示正負概念不參與任何運算,即乙個負數的1.8進製表示最高位需為1;乙個正數的1.8進製表示其最高位需為0。例如23的1.8進製表示為01c7ce,那麼-23的1.8進製表示即為11c7ce。特殊的,我們規定0的1.8進製數為0,沒有符號位。
值得注意的問題:
1.對於負數的1.8進製轉化,要先求取該負數在十進位制情況下的絕對值,然後轉化為1.8進製數,並將符號位轉化為1。
2.由於1.8是乙個1位小數,所以對於任何整數和1位小數都可以實行轉化,而對位數高於1位的小數由於其餘數的可能性較多不予討論轉換,但可以由1.8進製數表示。
3.對於1.8進製的任何運算需轉換為十進位制後在十進位制的數制下完成後再轉換回1.8進製。
4.在數制之間轉換時,十進位制下的正負數均可與1.8進製下的正負數進行相互轉化,而1.8進製的負數無法轉化為二進位制、八進位制、十六進製制下的數字。
為什麼說事件是特殊的委託
c 中的事件處理實際上是一種具有特殊簽名的delegate,像下面這個樣子 public delegate void myeventhandler object sender,myeventargs e 1 其中的兩個引數,sender代表事件傳送者,e是事件引數類。宣告乙個委託時,必須宣告需要委託...
為什麼世界是由數學構成的
cover 約翰 卡爾 弗里德里希 高斯 數學,是什麼呢?是一門呆板的課程?是複雜的計算?是看似高深而對我們生活毫無用處的東西?對數學最好的形容只怕是 一位很有個性的女神 開篇想象一下你在叢林中漫步,周圍是比你高三倍以上的大樹還有遍地的花草,周圍圍繞著雨過之後泥土的味道,並充斥著小蟲吱吱吱的叫聲。這...
什麼是MVC對MVC的理解?
首次接觸mvc概念是我在接觸angularjs的時候!首先mvc只是手段,終極目標是模組化和復用。一 mvc的概念 mvc全名是model view controller,是模型 model 檢視 view 控制器 controller 的縮寫,一種軟體設計典範,用一種業務邏輯 資料 介面顯示分離的...