Writer :BYSocket(泥沙砖瓦浆木匠) java
微 博:BYSocket 算法
豆 瓣:BYSocket socket
FaceBook:BYSocket 加密
Twitter :BYSocket spa
泥瓦匠喜欢Java,文章老是扯扯Java。 I/O 基础,就是二进制,也就是Bit。 3d
什么是Bit(位)呢?位是CPU处理或者数据存储最小的单元。相似于很小很小的开关,一开一关,表示为1或者0。因此,这就是计算机处理任何数据的“细胞”,要谨记。 code
而二进制,只是计算界一种规范和约定,准确的说是一种数制。念叨着“逢二进一”,这实际上是一种算法。如图 内存
说完了前面两点,泥瓦匠带你走向位运算的概念。数在内存中以二进制存储。位运算,也就是二进制运算,其实就是对数在内存的二进制直接操做的过程。这里有人发问了, get
Q:都是1+1,位运算不见得结果不一样吧。 it
A:这个问得好。位运算在常见的场景下是凸显不了好处的。而在特定下,一者计算方便,速度快,支持面广。好比我举几个例子,能够利用位运算判断值的奇数偶数,还有某些特定的算法好比压缩,加密算法严重依赖位算法。两者其存储字节小,好比在文件的权限(读,写等)都是用位来表示的。
上面,用小对话形式和举例一块儿说明了位运算。下面开始实战。
1、位运算与 & { 两位全1,结果才为1 } 如图:
做用:
① 清零。若是特定段位须要清0,则其余段与各位为0 与运算便可。0xFF & … 可使靠右8位的其余都清0
② 取一个数中的指定位。1010 1110 & 0xF 能够得到 1010 1110的低4位。
2、位运算或 | { 只要有个1,结果就为1 } 如图:
做用:用于补1,哪里须要1就补哪里。
3、异或运算 ^{ 两个响应位不一样,则为1 }
做用: 特定位翻转 1010 1110 ^ 0xF = 1010 0001
4、移位运算 左移和右移
” < <” 左移:右边空出的位上补0,左边的位将从字头挤掉,其值至关于乘2。如图:
右移就不重复了。
这里再增长一个解决上面泥瓦匠提到的怎么判断奇数偶数。
// Is it odd? (value & 0x1) > 0 // Is it divisible by two (even)? (value & 0x1) == 0
Bit 位虽小可是基石,滴水穿石。水滴-位,值得咱们好好了解。这里复杂的压缩算法这些,之后写到算法再说。
要点:
概念
操做符运算
Writer :BYSocket(泥沙砖瓦浆木匠)
微 博:BYSocket
豆 瓣:BYSocket
FaceBook:BYSocket
Twitter :BYSocket