回到目录进制我是一个程序猿,我喜欢简单的数字,十进制如何,数字太多,有10种数字组成,但由于它广为人知,所有使用最为广泛,人们的惯性思维培养了十进制,并说它是最容易被计算的数字,事实上,在计算机里,最简单的进制是当然是二进制,原因最为直接,因为它只有两种数字,0和1。二进制里的最 ...
回到目录
进制
我是一个程序猿,我喜欢简单的数字,十进制如何,数字太多,有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; }
原标题:Lind.DDD.Manager里的3,7,15,31,63,127,255,511,1023,2047
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。