C位处理

C的位处理包括6类:

& 按位与

|按位或

~ 非

^ 异或

<< 左移

>> 右移

 

& 按位与:相应位数含0,则该位置0

  00101110
 & 01100101
结果00100100

 

| 按位或:相应位数含1,则该位置1

  00101110
 | 01100101
结果01101111

 

~ 非:若位数为1,则置为0;若为0,则置1

  ~00101110
结果11010001

 

^ 异或:不同位置1,相同位置0

  00101110
 | 01100101
结果01001011

 

<< 左移:缺少位数补0

00101110 << 1
结果01011100

 

>> 右移:

//符号位为0,则右移补0
   00101110 >> 1
结果00010111

// 符号位为1,则右移补1
  10101110 >> 1
结果11010111

 

 

完整示例:

#include <stdio.h>
int main(int argc, char* args[]){
        int a = 0x2e;
        int b = 0x65;
        int c = a & b;
        printf("%0x\n", c);
        printf("%0x\n", a | b);
        int d = b^a;
        printf("%0x\n", d);
        printf("%0x\n", ~a);
        printf("%0x\n", (~a) >> 1);
        printf("%0x\n", a<<1);
        printf("%0x\n", a>>1);
        printf("%0x\n", a>>1);
        int e = -3;
        printf("%0x\n", e);
        printf("%0x\n", e >> 2);
        printf("%0x\n", e << 2);
        return 0;
}

结果:

24
6f
4b
ffffffd1
ffffffe8
5c
17
17
fffffffd
ffffffff
fffffff4

 

 

posted @ 2012-09-05 10:32  haiyupeter  阅读(250)  评论(0编辑  收藏  举报