免费搭建微信网站设计,wordpress绝对目录,无备案网站可以做百度推广,wordpress视频大小回到目录 进制 我是一个程序猿#xff0c;我喜欢简单的数字#xff0c;十进制如何#xff0c;数字太多#xff0c;有10种数字组成#xff0c;但由于它广为人知#xff0c;所有使用最为广泛#xff0c;人们的惯性思维培养了十进制#xff0c;并说它是最容易被计算的数字…回到目录 进制 我是一个程序猿我喜欢简单的数字十进制如何数字太多有10种数字组成但由于它广为人知所有使用最为广泛人们的惯性思维培养了十进制并说它是最容易被计算的数字事实上在计算机里最简单的进制是当然是二进制原因最为直接因为它只有两种数字0和1。 二进制里的最简单的运算 不是加也不是减而是位移即将数字水平向左或者向右进行移动在数学里的实际意义就是乘以2和除以2对于每种高级程序设计来说都有自己的位运算符大多部都使用和来表示对于位运算它有自己的实际意义对于自然数字来说它的实际意义是什么呢让我们来一起看一下。 自然数据2的奥秘 十进制2对应二进制的10 位移运算的结果 对上面的结果我们可以看到的位移运算刚好是的次幂这个确实很有意思但还不是最有意思的对于数字来说还有一些位运算下面我们来看一下图示。 我们看一下2的指数分别是1到10在而它的幂我们是否很熟悉这在计算机设置里经常可以看到你的内存硬盘盘显卡上的存储存量应该都有它们的身影我们可以试着把这些幂进行按位取或看一下结果 1 | 23 1 | 2 | 47 1 | 2 | 4 | 815 1 | 2 | 4 | 8 | 16 31 1 | 2 | 4 | 8 | 16 | 32127 实际意义 这个有点像杨辉三角的东西在我们平时开发时经常会用到因为对于这些结果都只有唯一的结合我们如果把每位代表一种权限那么可以把这些结果代表这些权限的组合这确实很有意思而在这些组合里我们也可以查找哪些元素权限不在某个结果之内这些都可以使用位移运算实现。 /// summary/// 从位集合中找到空位/// /summary/// param namemax/param/// param namehe/param/// returns/returnslong 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 nameTSource/typeparam/// param namesource/param/// param nameselector/param/// returns/returnspublic static long BinaryOrTSource(this IEnumerableTSource source, FuncTSource, long selector){long result 0;foreach (var item in source){result | selector(item);}return result;} 对于上面的位移运算来说它们的实现意义在大叔的权限体系里得到了完美的体现我们可以看一下数据表的设计使用Flag来设计授权按钮即每种按钮都有唯一的位标识而它们可以相互组合 授权按钮组件的结果 对于角色授权时你可以将多种按钮组合授权而使用一个字段来存储位运算的结果即可无论从效率还是操作上都比拼字符串和关系表来的更容易 本代码选自《Lind.DDD.Manager》相关代码和程序的截图 感谢各位的阅读 回到目录