Java I/O : Bit Operation 位运算
2015-06-06 00:24
369 查看
摘要:
文章总是扯扯Java。 I/O 基础,就是二进制,也就是Bit。一、Bit与二进制什么是Bit(位)呢?位是CPU处理或者数据存储最小的单元。类似于很小很小的开关,一开一关,表示为1或者0。所以,这就是计算机处理任何数据的 ...
文章总是扯扯Java。 I/O 基础,就是 二进制 ,也就是 Bit 。
什么是Bit(位)呢?位是CPU处理或者数据存储最小的单元。类似于很小很小的开关,一开一关,表示为1或者0。所以,这就是计算机处理任何数据的“细胞”,要谨记。
而二进制,只是计算界一种规范和约定,准确的说是一种数制。念叨着“逢二进一”,这其实是一种算法。如图
说完了前面两点,泥瓦匠带你走向位运算的概念。数在内存中以二进制存储。位运算,也就是二进制运算,其实就是对数在内存的二进制直接操作的过程。这里有人发问了,
Q:都是1+1,位运算不见得结果不同吧。
A:这个问得好。位运算在常见的场景下是凸显不了好处的。而在特定下,一者 计算方便,速度快,支持面广 。比如我举几个例子,可以利用位运算判断值的奇数偶数,还有某些特定的算法比如压缩,加密算法严重依赖位算法。二者 其存储字节小,比如在文件的权限(读,写等)都是用位来表示的。
上面,用小对话形式和举例一起说明了位运算。下面开始实战。
① 清零。如果特定段位需要清0,则其他段与各位为0 与运算即可。0xFF & … 可以使靠右8位的其他都清0
② 取一个数中的指定位。1010 1110 & 0xF 可以获得 1010 1110的低4位。
作用:用于补1,哪里需要1就补哪里。
作用: 特定位翻转 1010 1110 ^ 0xF = 1010 0001
” < <” 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。如图:
右移就不重复了。
这里再增加一个解决上面泥瓦匠提到的怎么判断奇数偶数。
?
Bit 位虽小但是基石,滴水穿石。水滴-位,值得我们好好了解。这里复杂的压缩算法这些,以后写到算法再说
文章总是扯扯Java。 I/O 基础,就是二进制,也就是Bit。一、Bit与二进制什么是Bit(位)呢?位是CPU处理或者数据存储最小的单元。类似于很小很小的开关,一开一关,表示为1或者0。所以,这就是计算机处理任何数据的 ...
文章总是扯扯Java。 I/O 基础,就是 二进制 ,也就是 Bit 。
一、Bit与二进制
什么是Bit(位)呢?位是CPU处理或者数据存储最小的单元。类似于很小很小的开关,一开一关,表示为1或者0。所以,这就是计算机处理任何数据的“细胞”,要谨记。而二进制,只是计算界一种规范和约定,准确的说是一种数制。念叨着“逢二进一”,这其实是一种算法。如图
二、位运算
说完了前面两点,泥瓦匠带你走向位运算的概念。数在内存中以二进制存储。位运算,也就是二进制运算,其实就是对数在内存的二进制直接操作的过程。这里有人发问了,Q:都是1+1,位运算不见得结果不同吧。
A:这个问得好。位运算在常见的场景下是凸显不了好处的。而在特定下,一者 计算方便,速度快,支持面广 。比如我举几个例子,可以利用位运算判断值的奇数偶数,还有某些特定的算法比如压缩,加密算法严重依赖位算法。二者 其存储字节小,比如在文件的权限(读,写等)都是用位来表示的。
上面,用小对话形式和举例一起说明了位运算。下面开始实战。
三、操作符实战
一、位运算与 & { 两位全1,结果才为1 } 如图:
作用:
① 清零。如果特定段位需要清0,则其他段与各位为0 与运算即可。0xFF & … 可以使靠右8位的其他都清0② 取一个数中的指定位。1010 1110 & 0xF 可以获得 1010 1110的低4位。
二、位运算或 | { 只要有个1,结果就为1 } 如图:
作用:用于补1,哪里需要1就补哪里。
三、异或运算 ^{ 两个响应位不同,则为1 }
作用: 特定位翻转 1010 1110 ^ 0xF = 1010 0001
四、移位运算 左移和右移
” < <” 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。如图:右移就不重复了。
这里再增加一个解决上面泥瓦匠提到的怎么判断奇数偶数。
?
// Is it odd?
(value & 0x1) > 0
// Is it divisible by two (even)?
(value & 0x1) == 0
四、总结
Bit 位虽小但是基石,滴水穿石。水滴-位,值得我们好好了解。这里复杂的压缩算法这些,以后写到算法再说
相关文章推荐
- Java interface 做函数参数
- Java for LeetCode 171 Excel Sheet Column Number
- Java for LeetCode 169 Majority Element
- 在控制台打印半径为R的圆
- 在控制台用星号打印一个高M的等腰三角形与菱形
- 魔术矩阵
- Java多线程、事件
- Spring @MVC configuration without XML
- MD5加密结果在不同的环境下出现不一致
- 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)
- Eclipse配色方案
- SSO单点登陆环境搭建
- java高级工程师需要掌握的技术
- 斐波那契堆(Fibonacci heap)原理详解(附java代码实现)
- 【JAVA基础知识总结】Java自定义异常
- 【JAVA基础教程】java中异常机制总结
- java project 连接hibernate 出错
- [note] java与DB
- Java for LeetCode 168 Excel Sheet Column Title
- Java学习篇之---LinkedList