回到目录

进制

我是一个程序猿,我喜欢简单的数字,十进制如何,数字太多,有10种数字组成,但由于它广为人知,所有使用最为广泛,人们的惯性思维培养了十进制,并说它是最容易被计算的数字,事实上,在计算机里,最简单的进制是当然是二进制,原因最为直接,因为它只有两种数字,0和1。

二进制里的最简单的运算

不是加,也不是减,而是位移,即将数字水平向左或者向右进行移动,在数学里的实际意义就是乘以2和除以2,对于每种高级程序设计来说都有自己的位运算符,大多部都使用<<和>>来表示,对于位运算,它有自己的实际意义,对于自然数字2来说,它的实际意义是什么呢?让我们来一起看一下。

自然数据2的奥秘

十进制:2,对应二进制的10

位移运算的结果

aaarticlea/png;base64,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" alt="" />

对上面的结果,我们可以看到2的位移运算刚好是2的N次幂,这个确实很有意思,但还不是最有意思的,对于数字来说还有一些位运算,下面我们来看一下图示。

aaarticlea/png;base64,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" alt="" />

我们看一下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 = ; i < he; i = i << )
{
if ((he & i) != i)
return i;
}
return ;
}

大叔曾经也对一些聚合运算进行了扩展,对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 = ;
foreach (var item in source)
{
result |= selector(item);
}
return result;
}

对于上面的位移运算来说,它们的实现意义在大叔的权限体系里得到了完美的体现,我们可以看一下数据表的设计,使用Flag来设计授权按钮,即每种按钮都有唯一的位标识,而它们可以相互组合!

aaarticlea/png;base64,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" alt="" />

授权按钮组件的结果

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACzCAIAAAC8WLYAAAAJ/UlEQVR4nO2dPVLrSBhFvSEox+yCKrMF5w4oUnYAAVXeBBlVXgMhARmL0QT66251t+5lhhFC51QHfh5g8JnvSm1rdN/u8+OdxWItuHaPj49N0yz+e6xi4QpXP7EIobFwhaufWITQWLjC1U+sfxHCt9P++nT5ua//fWuxwVqhuv/G1Qpf+DdWLoRvp/1u4OrhzRQ0fvvt+W8JLbo6PA3PnA+73bdf5h9SVw7h68P1nKLh9X77QL8qY4UQDi/g7bRPBiL7Zco/WpWX7Cq4ur277g9Vb6f99dW/epl/RV0xhImxuoRvv/BVGZsL4cfT3RDC5DgdmkpOm2mMe9bjJbtKrs73V/v718+P9/Nhd3df0PJ22l+fHg7dU3cvE0vTsVuzulIIL/dX+/vX82HXGstJeH247l70/nCbSvvIz+HDYbfb3Z6nP+H+6eG6/8aPp7vKzm65NRfCl9v+P//TXW/hcn+1Ozz1XxanNJ2k8bvWdXBSByuU0D4uaXk77QcVrdWZEK5bXSGErw/tOXCYq7qEqbTsHE5FJTPcvl8YHvyyNfeecCroo9+jBrMVMDlJZn/COlflgHU+xOe3qZapitn5W7O6fAijQ8y4QTAklOaw9BO6f9ftud2nvCxvZrqqZ8LwDWElhJX3MCufpGRJrkpaCGF77grY37/+LyFs4xfsTX7ZEraj3a9e2Y5ODjDTA177XWubpGTNvX8On5loyc5TPxajnL+iLhfC1+DtWbAnz0pItlQ5sfEcxpKTDxTfTvtd/y70963ZD2bao1e/c5j5YGbXaw2+7OU2fJO9rklKlhPCnJbJrAxnhk7OH1InuOqOMqmEj/fPfnsfvfCM2FJQg5/QBa9/L7q0luzi/5gxFq7W6mr8fPE3LkJoLFyt1NWv/UimXYTQWLjC1U8sQmgsXOHqJ9Zu8d+Axdr42j0CwKLsPj/eG9DAlQ6udAihAa50cKVDCA1wpYMrHUJogCsdXOkQQgNc6eBKhxAa4EoHVzqE0ABXOrjSSUJ4OQ7/4//xstgv9VuJXH0933Smbp6/2qcGe7ibhLB308ti0kbiEF6OvZCv55thtqAjcBX4uRzbybocu3H6er5hsJK5SqPGpAWUtqPDRMFIPoTdw8AYcxWH8HKs6GDSMiFst1lb95KlsHVvJywcJgYrdBXsPKPBYtI6KmfCzR/MJ8RH93Z8vp5v2kEihBFxCIM9QmqGSSt/OsocTRldRRvO9g9sRyPyIcypYdKiEH49H4MP+jY/RxOSLVY3Ov3RnQ9mQpJdQzdMvRomLST9dJTPjStwiUIn3mENsrhCkYGL9Qa40sGVDiE0wJUOrnQIoQGudHClQwgNcKWDKx1CaIArHVzp0LbGYi28OBMa4EoHVzqE0ABXOrjSIYQGuNLBlQ4hNMCVDq50CKEBrnRwpUMIDXClgysdQmiAKx1c6VD0ZBC5ytxF0VItc9gMaQgpeipD0ZNB4CpT9NQMwcQcRU8OFD0Z5EOYTBFD1TQNRU8OFD0ZFLbu8YQRwqZpKHpyoOjJID66J0VPPYSwaRqKnhwoejIYXWWKnprsnzZLPoQUPeWg6Mkg2WIlRU8dhLBpGoqeHCh6Mpi9RDE+t3mB8Q6LoqcaXKw3wJUOrnQIoQGudHClQwgNcKWDKx1CaIArHVzpEEIDXOngSoeiJxZr4cWZ0ABXOrjSIYQGuNLBlQ4hNMCVDq50CKEBrnRwpUMIDXClgysdQmiAKx1c6RBCA1zp4EqHoieDyNX0LorgHoqt35xD0ZMDRU8Ggatc0dNoj3vkKHoyoOjJIB/CzBQxWBQ9GVD0ZFDYuk8mjAxS9ORA0ZNBfHQvFD2hrmkaip4cKHoyGF0Vi54YqY58CCl6ykHRk0GyxUqLnr6eb5DWk+waKHqqQNGTQf0SRdjyxFWKeIdF0VMNLtYb4EoHVzqE0ABXOrjSIYQGuNLBlQ4hNMCVDq50CKEBrnRwpUPRE4u18OJMaIArHVzpEEIDXOngSocQGuBKB1c6hNAAVzq40iGEBrjSwZUOITTAlQ6udAihAa50cKVD0ZNB5Crz12VjbyQNIUVPZSh6Mghc1YuesEfRkwFFTwb5EHKzeI5wrih6qkPRk0Fh6x5OGPY6AlcUPc1A0ZNBfHQvFT012GsoenKg6MlgdFUseurAXj6EuMpB0ZNBssVKip6wF5LsGih6qkDRk8HMJQrsBcQ7LIqeanCx3gBXOrjSIYQGuNLBlQ4hNMCVDq50CKEBrnRwpUMIDXClgysdip5YrIUXZ0IDXOngSocQGuBKB1c6hNAAVzq40iGEBrjSwZUOITTAlQ6udAihAa50cKVDCA1wpYMrHYqeDCJXmaKnjstx839ZNkVPDhQ9GQSuckVPw5+OR+Qlc0XRUwWKngzyIZw+ZK4oenKg6MmgsHUf7xqfPNougSuKnmag6MkgPronRU/je8TCW8VtEYeQoqcaFD0ZjK7qRU+cCSl6cqDoySDZYiVFTyOEkKInB4qeDMRLFISwoejJgYv1BrjSwZUOITTAlQ6udAihAa50cKVDCA1wpYMrHUJogCsdXOlQ9MRiLbw4ExrgSgdXOoTQAFc6uNIhhAa40sGVDiE0wJUOrnQIoQGudHClQwgNcKWDKx1CaIArHVzpUPRkELnK3EUR3kK+9dso0hBS9FSGoieDwFW26InbU0eSuaLoqQJFTwb5EI4PkTYSzhVFT3UoejIobN0z29GtH9spenKg6MkgPronRU8h2KPoyYCiJ4PRVb3oifc5FD05UPRkkGyx0qKn4cOGzPF+cyS7BoqeKlD0ZDBziSJoHsVevMOi6KkGF+sNcKWDKx1CaIArHVzpEEIDXOngSocQGuBKB1c6hNAAVzq40qHoicVaeHEmNMCVDq50CKEBrnRwpUMIDXClgysdQmiAKx1c6RBCA1zp4EqHEBrgSgdXOoTQAFc6uNKh6MkgcpX967LTOqPtkoaQoqcyFD0ZBK5yRU/TOqMNk8wVRU8VKHoyyIewf1itM9oc4VxR9FSHoieDwtZ9PA+ywxoIXFH0NANFTwbx0T0peqrXGW2OOIQUPdWg6MlgdJUpepqpM9oa+RBS9JSDoieDZIuV1DpN64y2TLJroOipAkVPBnOXKCZ1Rhsm3mFR9FSDi/UGuNLBlQ4hNMCVDq50CKEBrnRwpUMIDXClgysdQmiAKx1c6VD0xGItvDgTGuBKB1c6hNAAVzq40iGEBrjSwZUOITTAlQ6udAihAa50cKVDCA1wpYMrHUJogCsdXOlQ9GRQcDWYmj6zXdIQUvRUhqIng8BVcMtgd0Pc9JlNk8wVRU8VKHoyCFyFftrH02c2TThXFD3VoejJIA5heC9vW2+RPLPEr/hriF1R9FSDoieDyNV4Z30/SdNnNkx+10DRUw6KngzyrqanPU6EFD05/ANKQj8iEJ3noAAAAABJRU5ErkJggg==" alt="" />

对于角色授权时,你可以将多种按钮组合授权,而使用一个字段来存储位运算的结果即可,无论从效率还是操作上,都比拼字符串和关系表来的更容易!

aaarticlea/png;base64,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" alt="" />

本代码选自《Lind.DDD.Manager》相关代码和程序的截图!

感谢各位的阅读!

回到目录

Lind.DDD.Manager里的3,7,15,31,63,127,255,511,1023,2047的更多相关文章

  1. Lind.DDD.Manager里菜单权限的设计

    回到目录 对于一个后台管理系统来说,你的权限设计与安全是重中之重,当你为一个权限分配一些菜单后,当这个权限的用户没有菜单权限时,这个菜单的URL是不可以被用户访问的,而在之前的设计中,没有考虑到这点, ...

  2. Lind.DDD敏捷领域驱动框架~介绍

    回到占占推荐博客索引 最近觉得自己的框架过于复杂,在实现开发使用中有些不爽,自己的朋友们也经常和我说,框架太麻烦了,要引用的类库太多:之前架构之所以这样设计,完全出于对职责分离和代码附复用的考虑,主要 ...

  3. Lind.DDD.Manage项目核心技术分享

    回到目录 关于Lind.DDD.Manager的培训与学习 讲解:张占岭 花名:仓储大叔 主要框架:Lind.DDD,Lind.DDD.Manager 关于Lind.DDD.Manager 由于数据模 ...

  4. Lind.DDD.Domain.IOwnerBehavor对实体的意义

    回到目录 对于Lind.DDD架构,我之前写了不少文章,对于它的Domain模式也介绍了不少,像之前的IEntity,ILogicDeleteBehavor,IModifyBehavor,IStatu ...

  5. Lind.DDD.SSO单点登陆组件的使用(原创)

    回到目录 一般sso的说明 在Lind.DDD框架里,有对单点登陆的集成,原理就是各个网站去sso网站统一登陆授权,之后在sso网站将登陆的token进行存储,存储方式随你(cache,redis,m ...

  6. Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现

    回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis ...

  7. Lind.DDD.ExpressionExtensions动态构建表达式树,实现对数据集的权限控制

    回到目录 Lind.DDD框架里提出了对数据集的控制,某些权限的用户为某些表添加某些数据集的权限,具体实现是在一张表中存储用户ID,表名,检索字段,检索值和检索操作符,然后用户登陆后,通过自己权限来构 ...

  8. Lind.DDD.Events领域事件介绍

    回到目录 闲话多说 领域事件大叔感觉是最不好讲的一篇文章,所以拖欠了很久,但最终还是在2015年年前(阴历)把这个知识点讲一下,事件这个东西早在C#1.0时代就有了,那时学起来也是一个费劲,什么是委托 ...

  9. Lind.DDD.Messaging框架通讯组件介绍

    回到目录 大 家好,今天有时间来介绍一下Lind.DDD框架里的消息机制,消息发送这块一般的实现方法是将Email,SMS等集成到一个公用类库里,而本身 Email和SMS没什么关系,它们也不会有什么 ...

随机推荐

  1. IIS部署Remoting总结

    1.在IIS里新建一个网站,命名为test,路径指向 e:\test: 2.在 e:\test下创建目录bin: 3.把Remoting远程对象的Project设置为类库,编译为DLL文件,然后复制到 ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (18) -----第三章 查询之结果集扁平化和多属性分组

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-14  结果集扁平化 问题 你有一对多关联的两个实体,你想通过一个查询,获取关联 ...

  3. JS.中文乱码,Jsp\Servlet端的解决办法

    JS.中文乱码,Jsp\Servlet端的解决办法 2010-03-08 15:18:21|  分类: Extjs |  标签:encodeuricomponent  乱码  urldecoder   ...

  4. WPF入门教程系列二十三——DataGrid示例(三)

    DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...

  5. jQuery 2.0.3 源码分析 数据缓存

    历史背景: jQuery从1.2.3版本引入数据缓存系统,主要的原因就是早期的事件系统 Dean Edwards 的 ddEvent.js代码 带来的问题: 没有一个系统的缓存机制,它把事件的回调都放 ...

  6. jQuery源码分析系列(36) : Ajax - 类型转化器

    什么是类型转化器? jQuery支持不同格式的数据返回形式,比如dataType为 xml, json,jsonp,script, or html 但是浏览器的XMLHttpRequest对象对数据的 ...

  7. 浅谈requireJS

    项目中大都使用模块化开发,requireJS作为AMD模块开发的典范,所以有必要学习下.通过一步步利用requireJS编写demo,从而学习requireJS的一个整体开发流程以及自我使用requi ...

  8. SharePoint 2013 托管导航 无法被开启的解决办法

    在阅读了园子中霖雨的一片博文<SharePoint 2013 托管导航及相关配置>之后,非常想尝试一下SharePoint 2013 中的这个新功能,但是我的网站集包括样式是从2010升级 ...

  9. 用jekyll制作高大上的网站(二)——实际应用

    最近公司要制作个文档库,直接就可以将jekyll应用到实际中. 模版使用了Jekyll Clean,这么模版相对内部简单一点,学习成本不会很大,而复杂的Minimal Mistakes就当作参考. 模 ...

  10. c#和Javascript中去重总结

    一.前言 去重在我们的开发过程中经常遇到,避免重复元素的添加,我们需要对获取到的集合(包括List.Array等) 做相关的过滤操作.确保对象的唯一性,从而达到保证数据不冗余重复.由于自己是做.net ...