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》相關代碼和程序的截圖!

感謝各位的閱讀!

回到目錄

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/283832.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283832.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283832.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3.20學習內容,字符串與列表

一、字符串類型&#xff1a; 作用&#xff1a;名字&#xff0c;性別&#xff0c;國籍&#xff0c;地址等描述信息 定義&#xff1a;在單引號\雙引號\三引號內&#xff0c;由一串字符組成。 需要掌握的方法&#xff1a; 1、strip 去除指定字符lstrip 去除左邊指定字符rstri…

客戶端應用試用限制設計

1.概要最近接到公司安排的任務給客戶端設計一個“試用30天”的一個需求&#xff0c;其功能主要是為了防止客戶拿到產品之后不支付尾款繼續使用。眾所周知靠純軟件想防“盜版”&#xff0c;“限制試用”等做法是行業難題。只要價值足夠高一定有人會破解繞過你的所有防線達到免費…

【開發工具之Spring Tool Suite】6、用Spring Tool Suite簡化你的開發

如果你是一個喜歡用spring的人&#xff0c;你可能會在欣賞spring的強大功能外&#xff0c;對其各樣的配置比較郁悶&#xff0c;尤其是相差較大的版本在配置文件方面會存在差異&#xff0c;當然你可以去花不少的時間去網上查找相關的資料&#xff0c;當你準備使用更高版本spring…

康威定律,作為架構師還不會靈活運用?

Soft skills are always hard than hard skills. 軟技能比硬技能難。 老板聽說最近流行“微服務”&#xff0c;問架構師咱們的系統要不要來一套&#xff1f;老板又聽說最近流行“中臺系統”&#xff0c;問架構師咱們要不要搞起來&#xff1f;其實&#xff0c;這些問題不用老板問…

使用onclick跳轉到其他頁面。使用button跳轉到指定url

1. οnclick"javascript:window.location.hrefaa.htm" 2. οnclick"locationURL"3,。 οnclick"window.location.href?id11"轉載于:https://www.cnblogs.com/wujixing/p/5856087.html

Avalonia Beta 1對WPF做了很多改進

\看新聞很累&#xff1f;看技術新聞更累&#xff1f;試試下載InfoQ手機客戶端&#xff0c;每天上下班路上聽新聞&#xff0c;有趣還有料&#xff01;\\\Avalonia將自己定義為“基于WPF&#xff08;使用XAML、數據綁定以及lookless控件等&#xff09;的跨平臺.NET UI框架。”在第…

WebView2 通過 PuppeteerSharp 實現RPA獲取壁紙 (案例版)

此案例是《.Net WebView2 項目&#xff0c;實現 嵌入 WEB 頁面 Chromium內核》文的續集。主要是針對WebView2的一些微軟自己封裝的不熟悉的API&#xff0c;有一些人已經對 PuppeteerSharp很熟悉了&#xff0c;那么&#xff0c;直接用 PuppeteerSharp的話&#xff0c;那就降低了…

[轉]2022 年 Java 行業分析報告

你好&#xff0c;我是看山。 前段時間介紹了從 Java8 到 Java17 每個版本比較有特點的新特性&#xff08;收錄在 從小工到專家的 Java 進階之旅 專欄&#xff09;&#xff0c;今天看到 JRebel 發布了《2022 年 Java 發展趨勢和分析》&#xff0c;于是借此分析一下 Java 行業的現…

Mysql 數據庫學習筆記03 存儲過程

一、存儲過程&#xff1a;如下 通過 out 、inout 將結果輸出&#xff0c;可以輸出多個值。 * 調用存儲過程&#xff1a; call 存儲名稱&#xff08;參數1&#xff0c;參數2&#xff0c;...&#xff09;; 如指定參數不符合要求&#xff0c;返回 Empty Set * 查詢存儲過…

android 代碼混淆模板

#指定代碼的壓縮級別 -optimizationpasses 5 #包明不混合大小寫 -dontusemixedcaseclassnames #不去忽略非公共的庫類 -dontskipnonpubliclibraryclasses#優化 不優化輸入的類文件 -dontoptimize#預校驗 -dontpreverify#混淆時是否記錄日志 -verbose# 混淆時所采用的算法 -opt…

vue+vuecli+webapck2實現多頁面應用

準備工作 在本地用vue-cli新建一個項目&#xff0c;首先安裝vue-cil&#xff0c;命令&#xff1a; npm install -g vue-cli 新建一個vue項目,創建一個基于"webpack"的項目,項目名為vuedemo&#xff1a; vue init webpack vuedemo 這里有一個地方需要改一下&#xff0…

一文把Docker、Kubernetes搞懂:什么是Docker?什么是Kubernetes?Docker和Kubernetes有什么關系和區別?通俗解釋Docker、Kubernetes

一、Docker解決的問題 1、統一標準 ● 應用構建 ○ Java、C、JavaScript——編程各異 ○ 打成軟件包 ○ .exe&#xff08;類似Windows&#xff0c;最終也只是生產exe執行&#xff09; ○ 使用docker build … 打包成 鏡像——這就類似于exe ● 應用分享 ○ 所有軟件的鏡像放到一…

Python-高階函數

#encodingUTF-8import sys # 高階函數高階函數實際上是參數可接受函數的函數即參數為函數的函數 # map()map()接收兩個參數&#xff0c;一個是函數&#xff0c;一個是序列&#xff0c;將此函數分別作用于該序列的每個元素&#xff0c;返回處理后的序列結果def c2(x): return x…

程序員雙手飛快敲鍵盤的時候是在敲代碼嗎?

當你看到一個程序員的兩只手在鍵盤上上下翻飛&#xff0c;行云流水的時候&#xff0c;多半不是在敲擊代碼大概率是在跟產品經理撕逼討論需求另一種可能就是在跟測試打口水仗10%幾率是在論壇碼字摸魚或者和人家開噴了。1%幾率是在跟MM聊天可以手速飛快而不需要停下思考的代碼&am…

erlang-17版本的編碼方式

最近在騰訊云租了個云主機&#xff1a;鏡像提供方&#xff1a;選擇服務市場 &#xff1a;多語言環境&#xff08;Centos 7.0 64位 Python Perl Ruby Erlang &#xff09; 他們集成軟件安裝的是erlang-17版本&#xff0c;我之前用erlang-16版本一直沒遇到什么問題&#xff1b; 這…

幾分鐘上線一個網站 真是神器

1、ToolJet 簡介 ToolJet 是一個開源的低代碼框架&#xff0c;可以快速構建和部署內部工具&#xff0c;而無需工程團隊付出太多努力。您可以連接到您的數據源&#xff0c;例如數據庫&#xff08;如 PostgreSQL、MongoDB、Elasticsearch 等&#xff09;、API 端點&#xff08;To…

翻譯:用戶變量(User-Defined Variable)(已提交到MariaDB官方手冊)

本文為mariadb官方手冊&#xff1a;User-Defined Variables的譯文。 原文&#xff1a;https://mariadb.com/kb/en/user-defined-variables/我提交到MariaDB官方手冊的譯文&#xff1a;https://mariadb.com/kb/zh-cn/user-defined-variables/ 用戶變量是指由用戶創建&#xff0…

移植Python3到TQ2440(一)

平臺 硬件&#xff1a;TQ2440 64MB內存 256MB NandFlashbootloader&#xff1a;U-Boot 2015.04kernel&#xff1a;linux-4.9Python: Python-3.6.0工具鏈&#xff1a;arm-none-linux-gnueabi-gcc 4.8.3概述 現在樹莓派很火&#xff0c;在樹莓派上面用戶可以通過Python來控制板…

WinForm(六)組合布局屬性

WinForm是基于控件的&#xff0c;不像codemark的架構&#xff0c;可以非常靈活的用mark來布局&#xff0c;它只能用控件布局屬性和窗口控件來完成對UI的布局。容器控件有一組控件叫容器控件&#xff0c;對布局特別有作用&#xff0c;它們分別是&#xff1a;TableLayoutPanel&am…

Qt 網絡編程

QT 網絡編程 TCP 編程 模塊引入 QT network 頭文件 #include <QTcpServer> // TCP服務器端使用 #include <QTcpSocket> // TCP服務器和客戶端都使用 編程流程 服務端 1&#xff09;實例化 QTcpServer 對象 -----------------------------> socket 2&#x…