开发者社区> 二哥聊RPA> 正文

Java I/O : Bit Operation 位运算

简介:
+关注继续查看

一、Bit与二进制

什么是Bit(位)呢?位是CPU处理或者数据存储最小的单元。类似于很小很小的开关,一开一关,表示为1或者0。所以,这就是计算机处理任何数据的“细胞”,要谨记。

而二进制,只是计算界一种规范和约定,准确的说是一种数制。念叨着“逢二进一”,这其实是一种算法。如图

image

二、位运算

说完了前面两点,泥瓦匠带你走向位运算的概念。数在内存中以二进制存储。位运算,也就是二进制运算,其实就是对数在内存的二进制直接操作的过程。这里有人发问了,

Q:都是1+1,位运算不见得结果不同吧。

A:这个问得好。位运算在常见的场景下是凸显不了好处的。而在特定下,一者计算方便,速度快,支持面广。比如我举几个例子,可以利用位运算判断值的奇数偶数,还有某些特定的算法比如压缩,加密算法严重依赖位算法。二者其存储字节小,比如在文件的权限(读,写等)都是用位来表示的。

上面,用小对话形式和举例一起说明了位运算。下面开始实战。

 

三、操作符实战

一、位运算与 & { 两位全1,结果才为1 } 如图:

bitwise-and

作用

① 清零。如果特定段位需要清0,则其他段与各位为0 与运算即可。0xFF & … 可以使靠右8位的其他都清0

② 取一个数中的指定位。1010 1110 & 0xF 可以获得 1010 1110的低4位。

 

二、位运算或 | { 只要有个1,结果就为1 } 如图:

bitwise-or

作用:用于补1,哪里需要1就补哪里。

 

三、异或运算 ^{ 两个响应位不同,则为1 }

作用: 特定位翻转 1010 1110 ^ 0xF = 1010 0001

 

四、移位运算 左移和右移

” < <” 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。如图:

shift-left

右移就不重复了。

 

这里再增加一个解决上面泥瓦匠提到的怎么判断奇数偶数。

1
2
3
4
// Is it odd?
(value & 0x1) > 0
// Is it divisible by two (even)?
(value & 0x1) == 0

 

四、总结

Bit 位虽小但是基石,滴水穿石。水滴-位,值得我们好好了解。这里复杂的压缩算法这些,以后写到算法再说。

要点:

概念

操作符运算

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
除法运算时的一个常见异常之java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representabl...
除法运算时的一个常见异常之java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representabl...
37 0
Java 中的 xx ≠ null 是什么新语法?
Java 中的 xx ≠ null 是什么新语法?
57 0
【Java SE】位运算和移位运算注意事项
【Java SE】位运算和移位运算注意事项
34 0
Java中字节Byte和位Bit的关系
Java中字节Byte和位Bit的关系
96 0
java用位运算实现乘除
java用位运算实现乘除
165 0
Java - 数据类型 short VS int 转换原理
Java - 数据类型 short VS int 转换原理
133 0
java安全编码指南之:Number操作
java安全编码指南之:Number操作
68 0
java中 byte为8 bits,那么-128为什么是最小值?
我们知道java中基本类型byte占8 bits,取值范围是-128到最+127,从这个正负号大家也能看出表示这个范围的二进制数是有符号位的,就是第一位。
58 0
Java 中的为什么SIZE仅为整数和长整数@Native?
Java 中的为什么SIZE仅为整数和长整数@Native?
80 0
Java 中的位运算
预备知识 原码 : 符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。 反码 : 正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
912 0
J - 位操作练习 (Java)
给出两个不大于65535的非负整数,判断其中一个的16位二进制表示形式,是否能由另一个的16位二进制表示形式经过循环左移若干位而得到。 循环左移和普通左移的区别在于:最左边的那一位经过循环左移一位后就会被移到最右边去。
738 0
+关注
二哥聊RPA
公号「二哥聊RPA」。关注我,一起洞察 RPA ◎ RPA创业者 ◎ 现明堂红木商业顾问,为十月结晶、可啦啦、鑫蜂维等多家企业提供 RPA 咨询服务 ◎ 希望帮助大家在 RPA 上做一些力所能及的事情
文章
问答
视频
相关课程
更多
相关电子书
更多
Java 开发手册(华山版)
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多