1. 程式人生 > >Lind.DDD.Manager裡的3,7,15,31,63,127,255,511,1023,2047

Lind.DDD.Manager裡的3,7,15,31,63,127,255,511,1023,2047

回到目錄

進位制

我是一個程式猿,我喜歡簡單的數字,十進位制如何,數字太多,有10種數字組成,但由於它廣為人知,所有使用最為廣泛,人們的慣性思維培養了十進位制,並說它是最容易被計算的數字,事實上,在計算機裡,最簡單的進位制是當然是二進位制,原因最為直接,因為它只有兩種數字,0和1。

二進位制裡的最簡單的運算

不是加,也不是減,而是位移,即將數字水平向左或者向右進行移動,在數學裡的實際意義就是乘以2和除以2,對於每種高階程式設計來說都有自己的位運算子,大多部都使用<<和>>來表示,對於位運算,它有自己的實際意義,對於自然數字2來說,它的實際意義是什麼呢?讓我們來一起看一下。

自然資料2的奧祕

十進位制:2,對應二進位制的10

位移運算的結果

對上面的結果,我們可以看到2的位移運算剛好是2的N次冪,這個確實很有意思,但還不是最有意思的,對於數字來說還有一些位運算,下面我們來看一下圖示。

我們看一下2的指數,分別是1到10在,而它的冪我們是否很熟悉,這在計算機設定裡經常可以看到,你的記憶體,硬碟,U盤,顯示卡上的儲存存量應該都有它們的身影,我們可以試著把這些冪進行按位取或,看一下結果

1 | 2=3

1 | 2 | 4=7

1 | 2 | 4 | 8=15

1 | 2 | 4 | 8 | 16 =31

1 | 2 | 4 | 8 | 16 | 32=127

實際意義

這個有點像楊輝三角的東西在我們平時開發時經常會用到,因為對於這些結果都只有唯一的結合,我們如果把每位代表一種許可權,那麼,可以把這些結果代表這些許可權的組合,這確實很有意思,而在這些組合裡,我們也可以查詢哪些元素(許可權)不在某個結果之內,這些都可以使用位移運算實現。

    /// <summary>
        /// 從位集合中找到空位
        /// </summary>
        /// <param name="max"></param>
        /// <param name="he"></param>
/// <returns></returns> long GetValidNumber(long he) { for (long i = 1; i < he; i = i << 1) { if ((he & i) != i) return i; } return 0; }

大叔曾經也對一些聚合運算進行了擴充套件,對sum,count這些聚集來說,位運算是不適合的,如果我們希望對一個集合進行按運求和(或),如何去實現了,.net基礎類庫沒有這種方式,所以,大叔對它進行了擴充套件,程式碼如下

      /// <summary>
        /// 按或進行位運算
        /// 作者:倉儲大叔
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <param name="source"></param>
        /// <param name="selector"></param>
        /// <returns></returns>
        public static long BinaryOr<TSource>(this IEnumerable<TSource> source, Func<TSource, long> selector)
        {
            long result = 0;
            foreach (var item in source)
            {
                result |= selector(item);
            }
            return result;
        }

對於上面的位移運算來說,它們的實現意義在大叔的許可權體系裡得到了完美的體現,我們可以看一下資料表的設計,使用Flag來設計授權按鈕,即每種按鈕都有唯一的位標識,而它們可以相互組合!

授權按鈕元件的結果

對於角色授權時,你可以將多種按鈕組合授權,而使用一個欄位來儲存位運算的結果即可,無論從效率還是操作上,都比拼字串和關係表來的更容易!

相關推薦

Lind.DDD.Manager3,7,15,31,63,127,255,511,1023,2047

回到目錄 進位制 我是一個程式猿,我喜歡簡單的數字,十進位制如何,數字太多,有10種數字組成,但由於它廣為人知,所有使用最為廣泛,人們的慣性思維培養了十進位制,並說它是最容易被計算的數字,事實上,在計算機裡,最簡單的進位制是當然是二進位制,原因最為直接,因為它只有兩種數字,0和1。 二進位制裡的最簡單的

Lind.DDD.Manager選單許可權的設計

回到目錄 對於一個後臺管理系統來說,你的許可權設計與安全是重中之重,當你為一個許可權分配一些選單後,當這個許可權的使用者沒有選單許可權時,這個選單的URL是不可以被使用者訪問的,而在之前的設計中,沒有考慮到這點,所以本次Lind.DDD.Manager的升級中,需要把這塊完善一下,將會在8月的Lind.DD

蛇形填數 描述 在n*n方陳填入1,2,...,n*n,要求填成蛇形。例如n=4時方陳為: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4

#include <stdio.h>int main() {int a[100][100];int m,n,M,N,x,y,i,j,t=0;scanf("%d",&M);N=M;for(x=0,y=M-1;N>0;N=N-2,x++,y--){for

判斷String字串中是否有連續的數字,有連續的就縮寫(比如:String str="1,2,3,7,10,11,12,13,14,15" 變為"1-3,7-7,10-15")

string newList=""; string str="1,2,3,7,10,11,12,13,14,15";//string字串 int min; int max; if (str!=null&&str

Lind.DDD.Utils.HttpHelper靜態物件引出的Http超時問題

回到目錄 Lind.DDD.Utils.HttpHelper元件主要實現了對HTTP的各種操作,如Get,Post,Put和Delete,它屬於最純粹的操作,大叔把它封裝的目的主要為了實現與API安全授權的統一,你不可能為每個請求都寫一個“邏輯完全一樣的加密規則”,這是違背DRY原則的,我們應該通過面向物件

Lind.DDD.Aspects通過Plugins實現方法的動態攔截~Lind的AOP

回到目錄 .Net MVC之所以發展的如些之好,一個很重要原因就是它公開了一組AOP的過濾器,即使用這些過濾器可以方便的攔截controller裡的action,並注入我們自己的程式碼邏輯,向全域性的異常記錄,使用者授權,Url授權,操作行為記錄等,這一大批Lind的基本元件都是實現MVC和API的過濾實現

零基礎學python-3.7 還有一個程序 python讀寫文本

efi == put ret mode nbsp inpu exce for each 今天我們引入另外一個程序,文件的讀寫 我們先把簡單的程序代碼貼上。然後通過我們多次的改進。希望最後可以變成一個簡單的文本編輯器 以下是我們最簡單的代碼: ‘crudfile--讀寫文

Centos6.5 編譯安裝Mysql 5.5.3.7

oca eight file ont libxml kconfig 最大值 fig toc 1、準備依賴包 yum install gcc* c++ * bison autoconfautomakezlib* libxml* ncurses-devellibmcrypt*

Joomla!3.7.0 Core SQL註入漏洞動態調試草稿

src cnblogs phpstorm prop ets legacy gets oom users 從這個頁面開始下斷點:Joomla_3.7.0/components/com_fields/controller.php 調用父類的構造

【cocos2d-x 3.7 飛機大戰】 決戰南海I (二) 我方飛機的實現

this pre ram object float engine 執行 osi new 在上一篇中。我們實現了遊戲的開始界面,接下來要實現遊戲的主界面。主界面包括地圖、我方飛機、敵機等 先來實現我方飛機 我方飛機具有哪些屬性呢? 飛機

spring4.3.7整合mongodb3.2.1

工具 spring mongodb 前幾天寫了個mongodb原生的工具類,參考“http://ylcodes01.blog.51cto.com/5607366/1933342”,項目裏需要做分布式,所以現在集成到spring中,今天結合spring-mongodb寫了一些常用的工具。BaseMo

【cocos2d-x 3.7 飛機大戰】 決戰南海I (四) 敵機管理

add 數量 觸摸 turn icp obj cti ack 產生 敵方飛機應該不定時的出現,有自己的生命周期、運動軌跡。這個類用來管理敵機的產生、移動、爆炸、銷毀等。 敵機管理類主要函數例如以下 //綁定控制器(更新分數)

【cocos2d-x 3.7 飛機大戰】 決戰南海I (十二) 遊戲結束場景

trac font back imp program 主界面 cti current close 遊戲結束的時候,要顯示分數。還要可以選擇是返回主場景還是退出遊戲 // 退出遊戲 void menuCloseCallback(cocos2d::

上周熱點回顧(7.3-7.9)

cnblogs 設計 似的 編輯 help 三層架構 預測 com 應用 熱點隨筆: · 性能優化知多少(『聖傑』)· 也談TDD,以及三層架構、設計模式、ORM……:沒有免費的午餐(自由飛)· EF查

【cocos2d-x 3.7 飛機大戰】 決戰南海I (三) 敵機實現

ons sel etl child min ack 自己的 life type 如今來實現敵機類 敵機和我方飛機相似,具有生命值、能夠發射子彈。而且有自己的運動軌跡。事實上能夠為它們設計一個共同的基類,這

感受來自小程序的神秘力量|第九程序新銳榜(7.15-7.21)

「第九程序新銳榜」每周精選第九程序最新收錄的好玩有用的小程序! 還在反反復復使用之前的小程序? 快來看看還有什麽新鮮玩意兒吧! 人人有功練 相信很多人心中都有一個“武俠”夢, 其實,“武俠”離我

3.7 將單向關聯改為雙向

同時 qstring for name 總結 class n) private urn 【1】單向、雙向關聯 單向和雙向關聯的區別:兩個類是否需要互相知道。 如果類A需要知道類B,而類B也需要知道類A,那麽這兩個類就應該是雙向關聯的。如果類A只需要知道類B,而類B不需要

hdu acm-step 1.3.7 排列2

判斷 技術 pan logs last ace pre 組合 per   本題題意:給4個數,求所有的4位數組合,按升序打印.   代碼如下: #include <cstdio> #include <algorithm> using namesp

jeecg 3.7.1 新版功能,集群定時任務動態發布模塊 使用規則

jeecg jeewx 集群定時任務 jeecg 3.7.1 集群定時任務動態發布模塊 使用規則新版特性: 支持集群定時任務,支持分布式。菜單路徑: 系統監控--》定時任務字段說明: 任務ID、任務說明:自定義即可cron表達式: 定義任務觸發的時間規則。提供一個在線生成

升級為python3.3.7版本步驟

linuxpython環境搭建-Linux系統下python2.7升級python3.3.7步驟首先Python 查看版本 , 在Linux下特別註意權限問題,創建目錄時候切記給予權限升級步驟 升級為python3.3.7版本步驟#解壓到下載目錄,在編譯前先在/usr/local建一個文件夾python3(以