位运算在Android中的应用

309 阅读3分钟

「这是我参与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的空间就能存储了。