概念
数字用二进制表示,每位要么是0要么是1,并在此基础上进行运算。
Bitwise is a level of operations that involves working with individual bits, which are the smallest units of data in a computer.
我们平时用的数字是十进制,每位是0到9中的一个。
应用
此处只是抛砖引玉,应用场景应该很多!
1. 用来判断整数是否是偶数
2. 用来判断正式是否是2的n次幂
内容
常用的位运算有 &、|、^、<<、>>、>>>、~
& 中文叫与运算,英文叫 bitwise and
0 & 0 = 0;
1 & 0 = 0;
0 & 1 = 0;
1 & 1 = 1;
| 中文叫或运算,英文叫bitwise or
0 I 0 = 0;
0 | 1 = 1;
1 | 0 = 1;
1 | 1 = 1;
<<中文叫左移,英文叫left shift
6<<2等于多少呢
6用二级制表示是00000000000000000000000000000110
左移2位,然后右边空出了两位,正整数补0或负整数补1。就变成00000000000000000000000000011000
00000000000000000000000000011000 再用十进制表示就是24.
即 6<<2=24,相当于 6 * (2*2)=24
>>叫右移,英文叫right shift
6>>2等于多少呢
6用二级制表示是00000000000000000000000000000110
右移两位,然后左边空了两位,正整数补0或负整数补1。就变成了00000000000000000000000000000001
00000000000000000000000000000001再用十进制表示就是1.
即6>>2=1,相当于6/(2*2)=1
^叫异或,也许叫异更准确点,英文叫exclusive or
0 ^ 0 = 0;
1 ^ 0 = 1;
0 ^ 1 = 1;
1 ^ 1 = 0;
~叫非,也叫位非,英文叫bitwise not
它是一元运算,即只要一个元素参与
~ 0 = 1;
~ 1 = 0;
>>>叫无符号右移,英文叫logical right shift
6 >>> 2也是等于1
-6 >>> 2等于多少呢
-6用二进制表示11111111111111111111111111111010
右移两位,然后左边空出两位补零,就变成00111111111111111111111111111110
00111111111111111111111111111110在用十进制表示就是1073741822。
注:这里以32位整数来计算的,如果是64位,其运算结果是不一样
优点
在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)
网友有篇关于它位运算速度文章:https://blog.csdn.net/qq_36523667/article/details/79321594
缺点
和我们从小用的十进制不一样,使得它比较难以理解。