「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」
位运算在Android中的应用
在学校中我们学习C语言的时候,经常看到与、或、非这样的运算,步入工作之后全职做Android,这样的位运算就用的比较少了,以至于再次遇到它时,竟有些陌生了。
一、位运算有哪些
位运算是一种计算操作符,它不仅仅局限于某种特定的语言。
JAVA语言是支持位运算的,运算符有&(与)、~(非)、|(或)、^(异或)、<<(左移位)、>>(右移位)
我们在用JAVA编写安卓程序时,位运算其实并不常见,但合理使用位运算能够提升代码的运行速度。
在安卓提供的SDK中,位运算出现的频率很高,那么位运算有什么优势呢。
二、位运算的优势
2.1 运行速度快
由于计算机的存储形式只有0和1两种状态,所以无论我们执行任何的计算操作,本质上最终都是要进行位操作。 所以直接进行位运算,就少了一步换算成位运算的过程。
举个例子。
一个简单的加法
int a = 3;
int b = 4;
int c = a + b;
==>>
3: 0 0 0 0 0 0 1 1
4: 0 0 0 0 0 1 0 0
————————————————————
7: 0 0 0 0 0 1 1 1
这里简单的字符用8位表示,前面的0省略了。
一个数值,我们可以很简单的得到它的位,那么它是怎么计算的呢?
这实际上是进位的方式,只是满2就进位。
1和0 -> 1
0和1 -> 1
0和0 -> 0
1和1 -> 0, 然后进位
在计算机中都是经过二进制去计算的,那么首先就需要将变量转化成二进制才能进行计算。
上面是加法的方式,减法呢。
了解这个问题,还需要了解原码、反码、补码的概念。传送门
2.2 内存减少
由于Java中最小的单位是byte(字节),但计算机中最小的单位的bit(位)。
一个byte 等于 8个bit,bit使用 0 和 1 存储。所以我们可以将原本很长的数据结构,存储成0和1的bit,节约内存的消耗和网络上的流量传输。
比如
- 例子1
简单点1和0表示true和false的场景。
一个组件有以下的属性:
是否垂直居中;是否水平居中;是否有背景;是否有颜色;是否有文字;是否是按钮;是否聚焦;是否可以点击。
上面的8个属性,我们仅仅用一个byte的内存空间就可以表示了。
比如都是true的话,就是 :
二进制的 11111111,也就是16进制的 0xFF,也就是10进制的255;
- 例子2
我们要传递一个ip地址。
正常情况下我们就字符串传递:“192.168.1.1”
这时候我们可以将它拆分成 4个字节,也就是一个int的空间就能存储了。