首先简单补下原码,补码,反码的相关知识,正数的补码为其本身,负数补码是反码加1.整数在计算机中以补码的形式存放。
如原码:-2 1000 0000 0000 0010
反码: 1111 1111 1111 1101
补码: 1111 1111 1111 1110
位运算符有按位与&,按位或|,按位异或^,取反~,左移<<,右移>>
(1)按位与 & 以12&9 为例:结果为8.
即 0000 1100
&0000 1001
00001000
作用:A)清零。X&0
B) 取某些位,如1,3位,X&0X0A
C)取高四位,X&0XF0
(2)按位或 | 如12|9=13
作用:A)将某些位置1
B)将低4位置1:X|0X0F
C) 将高四位置1:X|0XF0
(3)按位异或 12^9=5
作用:A)使某些位翻转,如1,3位:X^0X0A
B)自身异或得0,与0异或值不变。
C) 交换两个变量的值,a=a^b,b=b^a,a=a^b。
(4)取反 ~9=-10
作用:便于程序的移植,如将整数m的最低位置0,则可以m&~1,在64位和32位的机器上都可以用。
(5)左移 << 高位舍弃,低位补0
5<<1: 0100 0101 移后:0000 1010
在不舍弃有效位的情况下,左移相当于乘2;
对负数而言,左移时没有舍弃0,且最高位没变号时,相当于乘2;
-5<<2 :1111 1011 移后:1110 1100 (-20)
(6) 右移 >> 低位舍弃,高位补0或1,视机器情况而定。
正数高位补0,负数视机器情况,补0或1
复合运算:
&= |= <<=>>=^=
a&=b 即a=a&b
信息有时可以只用内存中的几个位表示,以节省内存空间,如:真假可以只用一位表示
利用位运算,将变量ch中的大写字母转为小写字母的表达式为ch|=0X20或ch^=0X20