位运算
1.&(按位与)
规则:
只有两个操作数对应位同为1时,结果为1,其余全为0. (或者是只要有一个操作数为0,结果就为0)。
举例:
5 & 10 = ?
10 的二进制为:1010
5 的二进制为:0101
则 5 & 10 的二进制为 0000,完整的运算为 5 & 10 = 0
2.|(按位或)
‘ | ’ 符号的作用是对运算符两侧以二进制表达的操作符按位分别进行’或’运算。
规则:
只有两个操作数对应位同为1时,结果为1,其余全为0. (或者是只要有一个操作数为1,结果就为1)。
举例:
5 | 10 = ?
10 的二进制为:1010
5 的二进制为:0101
则 5 | 10 的二进制为 1111,完整的运算为 5 | 10 = 15
3.^(按位异或)
‘ ^ ’ 符号的作用是对运算符两侧以二进制表达的操作数按位分别进行’异或’运算。
规则:
仅当两个操作数不同的时候,对应的输出结果才为1,否则为0。
举例:
5 ^ 10 = ?
10 的二进制为:1010
5 的二进制为:0101
则 5 ^ 10 的二进制为 1111,完整的运算为 5 ^ 10 = 15
4.~(按位非)
‘ ~ ’ 符号的作用是将各位数组取反。
规则:
全部的0变为1,1变为0。
在表示正负数的时候是从最高位看的,最高位如果为 ‘ 1 ’ 则为负数,如果是 ‘ 0 ’ 则是正数。
但是如果负数单纯是把最高位变为1的话,在运算中会出现不是我们想要的值。所以引入了:‘原码’,‘反码’,‘补码’。
正数的‘原码’,‘反码’,‘补码’都一样。
负数的‘反码’是对除了符号位(最高位)的‘原码’取反,而‘补码’是对‘反码’ + 1,而计算机所采用的就是‘补码’的方式。
5.<<(左位移运算符)
‘ << ’ 符号的作用是将一个运算对象的各二进制位全部左移若干位。
规则:
左边的二进制位丢弃,右边补0。
举例:
10 << 3 = ?
10 的二进制为:0000 0000 0000 1010
移位后为:0000 0000 0101 0000 (80)
则 10 << 3 = 80
6.>>(右位移运算符)
‘ >> ’ 符号的作用是将一个运算对象的各二进制位全部右移若干位。
规则:
正数左补0,负数左补1,右边丢弃。
举例:
10 >> 3 = ?
10 的二进制为:0000 0000 0000 1010
移位后为:0000 0000 0000 0001
则 10 >> 3 = 1
优势
1)运行速度最快
2)当我们进行乘除计算时,计算机是将乘法改变成加法进行循环计算,例如25×100是100个25相加,所以,我们可以利用位运算对其进行性能优化,
100=64+32+4,相当于将25左移6位,加25左移5位,加25左移2位.这样加法次数明显减少。性能大幅提高。