日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/9 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.Manager》相關代碼和程序的截圖!

感謝各位的閱讀!

回到目錄

總結

以上是生活随笔為你收集整理的Lind.DDD.Manager里的3,7,15,31,63,127,255,511,1023,2047的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。