首頁  >  文章  >  web前端  >  按位元儲存的概念及實例

按位元儲存的概念及實例

零下一度
零下一度原創
2017-06-23 09:14:471455瀏覽

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

位元儲存的概念

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

舉個栗子

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

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

 

##1......
styleType #supportType
1 1,3
2 1,2,3
#3

 

 

 

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

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

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

 

#styleType#supportType#152731......

 

 

 

#①場景一,在在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;

最後,將對應的十進位存到資料庫中即可。

更多場景參考這裡。  

  

#

以上是按位元儲存的概念及實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn