位运算是对二进制位的操作,它应用于整形数据,把整形数据看成固定的二进制序列,然后对二进制序列进行位运算
1、“按位与”运算符&
按位与运算 按位与运算符"&"是双目运算符。
其功能是参与运算的两数各对应的二进位相与。
只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例c=a&b
a:1010100101010111
& b:0110000011111011
= c:0010000001010011
按位与运算通常用来对某些位清0或保留某些位。
例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
2、“按位或”运算符|
按位或运算符“|”是双目运算符。
其功能是参与运算的两数各对应的二进位相或。
只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例c=a|b
a:1010100101010111
| b:0110000011111011
c:1110100111111111
3、“取反”运算符~
按位取反运算符是将二进制表示的运算对象按位取反
即将1变为0,将0变为1
例c=~a
~ a:1010100101010111
c:0101011010101000
int a = -110;
~a = =109;
int b = 110;
~b = = -110;
十进制运算中~a表示-1*(a+1);
4、“异或”运算符^
两个运算量的相应位相同,结果为0,相异结果为1
例c=a^b
a:1010100101010111
^ b:0110000011111011
c:1100100110101100
十进制运算中a^b等于a+b
5、移位运算符<< >>
左移和右移是把整数作为二进制序列,求出把这个序列左移或右移若干位后得到的序列
一般形式为x<<n或x>>nn是移动的位数
左移运算规则是将x的二进制全部向左移动n位,将左边移出的高位舍弃,右边空出的低位补0
左移运算等效与将整数值乘以2的n次幂
右移运算是将x的二进制全部向右移动n位,将右边移除的低位舍弃,左边高位空出要根据原来符号位补充。
无符号补0,有符号数正数补0负数补1
右移运算等效于将整数值除以2的n次幂
例a=5
b=a<<3即b=0000,0101<<3=0010,1000=40
c=a>>2即c=0000,0101>>2=0000,0001=1