###概述:
在二进制计算中,最常见的就是位运算了。而位运算也经常出现在各位大神的源码当中,在研读了snowflake算法以后。
决定自发的研究一些位运算,以应用到实际程序中。欢迎大家在评论区追加运算的应用场景,或者算法中实际应用到的位运算
本篇持续更新!!
###基本运算,定死一个值为MAX(8位DEMO):
最大值: 1111 1111 最小值 0000 0000
设X = MAX , Y < X 则有下列规律可言
与运算:(同时为1则结果为1,有一个不为1则结果为0)
1111 1111 & Y = Y
当Y>X的时候,Y&X = RES, RES小于Y和X的最小值。
或运算:(有一个为1,则结果为1)
1111 1111 | Y = 1111 1111
异或运算:(相同为0,不同为1)
1111 1111 ^ Y = ~ Y (非运算)
非运算结合与运算
~X & X = 同等位数最小值
非运算结合或运算
~X | X = 同等位数最大值
非运算结合异或运算(和非运算结合或运算具有同等效应)
~X ^ X = 同等位数最大值
###左移表示MAX
有X位二进制数,则最大的表示算法用位运算为
MAX = (1 << X) - 1
MAX = (-1 << X) ^ -1
以上这种写法,第二种计算更精,因为逻辑运算符,位运算符要高于算数运算符,
在计算机中,负数是以补码的形式存在的哦,可以尝试一下,很有意思
###原码,反码,补码|以1为值,8位二进制数举例
原码为直接转换: 0000 0001
反码为原码的转换,1为0,0为1: 1111 1110
补码为反码+1,结果为: 1111 1111
###未完待续…
-进制转换
-进制为底数,所在位置为幂次方,以我们常用的十进制相加的和为任何进制与十进制的转换
9999 = 9x10的0次方+9X10的1次方+N = 十进制数
-snowflake算法