位操作介绍
位操作主要有与、或、非和异或,下面将介绍各种位操作的基本用法。
与
0 & 1 = 0
1 & 0 = 0
0 & 0 = 0
1 & 1 = 1
或
0 | 1 = 1
1 | 0 = 1
0 | 0 = 0
1 | 1 = 1
非
!0 = 1
!1 = 0
异或
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
1 ^ 1 = 0
位操作性质
上面这些知识应该是大家都已经了解的,那么接下来便问大家这些操作到底有什么作用?难道仅仅是为了做一些简单的位运算?
答案显然不是,熟练的运用这些操作,可以为你解决很多复杂的问题。
(1) 与操作其实就是get操作,即获得任意位的值。
给定任意的二进制数01010111,我想获得第4,5,6位的值,该如何操作呢?
0101 0111
& 0011 1000
------------------
0001 0000
(2) 或操作其实就是set操作,即设置任意位的值。
给定任意的二进制数01010111,我想把第4,5,6位设置为1。
0101 0111
| 0011 1000
------------------
0111 1111
(3) 异或操作其实就是取反操作,即把任意位的0变成1,1变成0。
给定任意的二进制数01010111,我想把第4,5,6三位由0变成1,由1变成0。
0101 0111
^ 0011 1000
------------------
0110 1111
思考
从上面可以看到,二进制都是由0和1组成的,因此在编写的时候,01数字较多不细心的话十分容易写错。有没有更加简洁的写法呢?
答案是有的,那就是采用八进制、十进制或十六进制。
八进制 0123 以0开头
十进制 123
十六进制 0x123 以0x开头
给定任意的一个整数1379,要get它的第3,5,8位,应该如何去做呢?
(1) 将一个字节的3、5、8三位设置为1即1001 0100;
(2) 将二进制转换为十六进制即0x54;
(3) 利用熟悉的语言就可以直接编写代码1379 & 0x54进行计算就可以得到结果。
利用十六进制就可以非常方便的编写代码,得到结果。
结语
本文主要介绍了位操作的定义,基本性质和一些基本应用,帮助大家更好的理解二进制。另外为了方便大家更好的记忆,简单归纳总结为如下:
与 = get
或 = set
异或 = 取反