程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。
####运算符号
按位与 & a&b
按位或 | a|b
按位异或 ^ a^b
按位取反 ~ ~a
左移 << a<<b
右移 >> a>>b
#####按位与运算
与运算就是将两个数据,按照对应的二进制数逐位进行逻辑与运算,相同位的两个数字都为1,则为1;若有一个不为1,则为0。
11010
& 10110
10010
通常可以用&1来判断一个数的奇偶。
#####按位或运算
或运算就是将两个数据,按照对应的二进制数逐位进行逻辑与运算,相同位的两个数字都为0,则为0;若有一个为1,则为1。
11010
| 10110
11110
#####按位异或运算
异或运算就是将两个数据,按照对应的二进制数逐位进行逻辑异或运算,相同位的两个数字相同,则为0;不同,则为1。可以用于将二进制数中的某一位取反。
11010
^ 10110
01100
下面的运算可以实现两个数的交换
a=a^b;
b=a^b;
a=a^b;
#####按位取反运算
取反运算就是将一个数据,按照对应的二进制数逐位进行逻辑取反运算,即0变为1,1变为0;进行此运算时,要特别注意数据的符号,如果为负,要转换为其补码。补码=符号位(最高位)以后按位取反再加1。
就以-1为例
二进制 :1000 0000 0000 0000 0000 0000 0000 0001
补 码 :1111 1111 1111 1111 1111 1111 1111 1111
~ 11010
00101
#####左移运算
a << b就表示把a转为二进制后左移b位(在后面添b个0)。a << b的值就是a乘以2的b次方,
1100100<<2 十进制为100
110010000 十进制为400
#####右移运算
a >> b表示二进制右移b位(去掉末b位),相当于a除以2的b次方(取整)。
1100100>>2 十进制为100
11001 十进制为25
#####运算优先级
1 ~
2 <<、>>
3 &
4 ^
5 |