第六机智: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

原文地址:https://www.cnblogs.com/hbuuid/p/12580709.html