淺談按位存儲

畢業季,浪了好久。。。過了這個六月,就正式踏入社會啦。。。總感覺還沒準備好。。。。。。。。。。 特大轉折。。。記錄一下最近的一些知識。。。

按位存儲的概念

       在數據庫存儲中,可以使用一種類二進制字符串來保存多個值,當這個二進制值是由0和1組成的時候,就可以按照從右到左,每個位按照2^n計算值相加進而換算成為一個十進制數,從而實現一個十進制值保存多種情況的目的。

舉個栗子

現在3種不同的css樣式,可以應用于不同的一些地方,如app、pc、小程序等。

按值存儲的話,分別用1-3代表3種樣式(styleType),分別用1-3代表支持類型app、pc、小程序(supportType),然后存儲的時候應該是按這種方式:

 

styleTypesupportType
11,3
21,2,3
31
......

 

 

 

 

 

顯然,這樣的話,supportType這個字段就要存儲多個styleType代表值。

那么,按位存儲是怎樣的呢。用3位的類二進制字符串來表示,從左到右每一位分別對應樣式1-3,1代表支持該樣式,0代表不支持該樣式。如要代表支持樣式1,3的話,就用101來表示,第一、三位為1,其他位置0.那我們存儲的時候,是不是就存儲這么一個3位的字符串呢。并不是,要存儲的是轉換后的一個十進制的數值。因為每一個位按照2^n轉換之后相加得到的十進制必然可以反解,這樣就可以知道這個值代表的是哪些樣式了。

按位存儲的話,應該是這樣存的:

 

styleTypesupportType
15
27
31
......

 

 

 

 

 

 

實際應用

①場景一,在app環境中,過濾樣式,即只把支持app的樣式過濾出來顯示。

應用原理:數值相與,只有1與1結果為1。

也就是說,我們如果要過濾出支持app的樣式,也就是過濾styleType中第一位為1時對應的樣式,即1**,也就是十進制數值中包含4這個數的。

js中,十進制數可以直接相與,所以遍歷過濾時代碼可以直接這樣判斷:

 

(item.supportType & 4 == 4)?'對應的styleType支持':'對應的styleType不支持'    //注意,==優先級比&大,所以要加括號

 

 

②場景二,修改supportType

因為保存到數據庫中的是一個十進制的數組,所以才修改對應關系的時候,必須知道改的是哪個位置,并改變相應位置上的值,類二進制表示就是0變為1或1變為0的過程,但是改變十進制的數組則是改變對應的位的2^n的增加減少過程。

如:

 

    var supportType = { //按位編碼,預留3位
        'app':4,
        'pc':2,
        'mini':1
    }
  var supportVal = 0;
  i f(obj.supportmini == 1){ //支持小程序
     supportVal= supportVal+supportType .mini;
   } 
  if(obj.supportPc == 1){ //支持pc
     supportVal= supportVal+ supportType .pc;
  } 
  obj.supportVal= supportVal;

 

 

最后,把對應的十進制存到數據庫中即可。

更多場景參考這里?! ?/p>

  

 來源:itnose

上一篇: 0前言

下一篇: js實現網頁只能在微信內打開,瀏覽器打不開!

分享到: 更多
老时时360官网 双色球最新计划 时时彩大小单双口诀 2019开奖记录开奖结果 奥客网七星彩定胆杀号 幸运飞艇助赢计划软件app 大乐透预测一注 快速时时开奖网址 控制重庆时时彩开奖 球棎足球比分007 幸运飞航收费计划软件 好运来计划软件怎么样 重庆时时彩直播 重庆时时历史开奖记录 优博时时彩平台 聚富世界下载安装