天天看點

第六機智:1248碼的應用,狀态碼應如何選擇

這個得從易經說起,計算機理論和易經有不解之緣。

太極生兩儀,兩儀生四象,四象生八卦

第六機智:1248碼的應用,狀态碼應如何選擇

說起1248碼,大家可能并不陌生。這種算法的始祖應該算是發源于易經了,其中的太極八卦就是如此。計算機中 Linux 系統上的權限管理機制将其發揮到了極緻,chmod 777 /xxx 這種操作後面的智慧便是如此。

1,最近項目中使用1248碼定義了IOT傳感器裝置的探頭路數:傳感器探頭的路數,1:代表第1路探頭,2:代表第2路探頭,4:代表第3路探頭,8:代表第4路探頭...以此類推~

2,假設某一個IOT裝置關聯到了某個設施(車輛,貨櫃,集裝箱)上,并且使用其中的1~n個探頭,如何知道該集裝箱使用了哪幾個探頭呢?

你是不是想到使用一個字元串1,3代表一個數組{1,3},表示他綁定了第1路和第3路探頭,如果随着探頭數量的擴充,這個字元串會越來越長,不利于擴充~

哪如何實作一個優雅的設計呢?1248碼将是你的不二選擇!

什麼是1248碼:

其實就是二進制和十進制之間轉換的1248指派法的原理。

二進制是使用一組1、0表示如下:

二進制:1001        1010

轉換   :8421        8421

十進制:9        10

那麼如何在上面提到的場景中應用呢?

--》1:代表第1路探頭,2:代表第2路探頭,4:代表第3路探頭,8:代表第4路探頭...以此類推~

使用:用探頭綁定的路數模1248,若結果大于0說明,route包含該路探頭,非常友善使用和擴充:

直接上代碼:

if((route & 1)> 0) {
//說明包含第一路探頭,balabala~處理
}else if((route & 2)> 0){
//說明包含第二路探頭,balabala~處理
}else if((route & 4)> 0){
//說明包含第三路探頭,balabala~處理
}else if((route & 8)> 0){
//說明包含第四路探頭,balabala~處理
}
........
如果想去掉if else ,大家可以自行實作噢      

擴充:

狀态碼的智慧:《把問題記錄一下,以防别人的分享連接配接失效》

(一個事物有5個流程,ABCDE一般的程式員通常會定義為 status 有5個狀态 0/1/2/3/4 ,流程的順序是 A->B->C->D->E ,可是有一天項目經理說這個流程會有個快捷流程 A->B->E 。于是原本的 0->1->2->3->4 就有部分資料變為了 0->1->4 ,這些都不會有太大的問題,然而,後來項目經理跟你說我需要區分在E狀态下它是經曆了 ABCDE 還是直接經曆 ABE ,于是乎,你就懵逼了。)http://duguying.net/article/%E7%8A%B6%E6%80%81%E7%A0%81%E8%AE%BE%E8%AE%A1%E7%9A%84%E6%99%BA%E6%85%A7%EF%BC%8C1234%E8%BF%98%E6%98%AF1248

狀态碼面試題:(

   1.你讓勞工為你工作7天,回報是一根金條,這個金條平分成相連的7段,每天結束的時候,勞工會向你要一段金條。如果隻允許你兩次把金條弄斷,你如何給你的勞工付費?

   2.有1000個蘋果,将它們放在100個箱子裡,怎麼放才能讓我向你要蘋果的時候,你都能整箱整箱的給我,你的給法是否唯一?

http://blog.chinaunix.net/uid-20676637-id-86111.html?/10085.html