3=00000011
5=00000101
1.与
1&1=1,1&0=0,0&0=0
即:两个1为1,其他都是0
例:3 & 5 =00000001
2.或
1|1=1,1|0=1,0|0=0
即:两个0为0,其他都是1
例:3 | 5=00000111
3.异或
1 ^ 1 = 0, 0 ^ 0 = 0,1 ^ 0 =1
即:相同为0,不同为1
例:3 ^ 5=00000110
或者按照不进位的加法计算
应用:交换a和b的值---a=a^b,b=a^b,a=a^b
4.同或
1⊙0=0,1⊙1=1,0⊙0=1
即:相同为1,不同为0
注:c语言中无同或表示的符号,可用~(a^b)表示ab的同或
5.左移
5<<2,表示5转换为二进制数后向左移动两位,如果高位处越位(一般32位,本篇均按8位计算),较高位丢弃,较低位补0,如5=00000101,5<<2=00010100=20,即5 * 22
公式:n<<m=n* 2m
6.右移
5>>2,表示5转换为二进制数后向右移动两位,低位丢弃,高位补0,如5=00000101,5>>2=00000001=1,即5/(22)向左取整
公式:n>>m=n/2m
7.取反
5=00000101,~5=11111010
位运算优势:直接操作二进制数,速度快,省内存