位运算
资料:
位运算用补码进行运算,正数的补码就是源码,负数的补码为源码取反加一,计算得出的结果如果是正数,就直接等于补码,若是负数则需减一取反,取反时符号位不变。
& 按位与: 都是1时才为1。
| 按位或: 都是0时才为0。
^ 按位异或: 异为1 ,同为0。
<< 左移: 将一个数取二进制后,进行左移运算,用来将一个数各二进制位全部向左移动若干位。
>> 右移: 将一个数取二进制后,进行右移运算,用来将一个数各二进制位全部向右移动若干位。
~ 取反: 将一个数每个位上都取相反值,1变成0,0变成1。
优先级: 按位取反是位运算符中优先级最高的,然后是算术运算符,其次是<<、>>,然后是关系运算符,最后是&,|,^ 。
举例
1)求10 << 2;
解析:
首先将a转换为二进制,即00001010,现将它左移两位得00101000,在转换回十进制得结果为40。
2)求-25 >> 3;
解析:
首先将b转化为二进制,即10011001,现将它取反得11100110再加一得11100111,然后右移三位得11111100,取反得00000011,然后减一得00000010,转换为十进制得结果为-4 。
3) 若a = 10, b = 20 , 求a & b;
解析:
将a和b转换为二进制后进行比较,仅有二者相等的时候输出1,因为二者不相等,所以输出0 。
4 ) 若a = 10 ,b = 20, 求a ^ b;
解析:
将a和b转化为二进制后一一对应,若相同输出0,相异输出1,得出结果后将二进制转化为十进制得结果为30 。
5)若a = 10 , b = 20 , 求a | b;
解析:
将a和b转化为二进制后一一对应,若同为0时才为0,得出结果后将二进制转化为十进制得结果为30 。
6)若a = 10,求 ~a ;
解析:
将a转化为二进制,00001010,然后取反加1,得11110101,因为是负数,所以再减1取反,得10001011,转换为十进制即为-11 。