位运算简易讲解

来源:互联网 发布:discuz源码 编辑:程序博客网 时间:2024/06/03 20:50

位运算&(和,一一为一,其余为0)
a=4;
b=5;
a=(0000 0100)2;
b=(0000 0101)2;

void and(int a, int b) {    printf("%d\n", a&b);//一一为一,其余为0    return;}//a&b=(0000 0100)2;

位运算|(或者,有一为一,无一为0)

void either(int a, int b) {    printf("%d\n", a | b);//有一为一,无一为0    return;}//a|b=(0000 0101)2;

位运算^(异或,相同为0,不同为1)

void other(int a, int b) {    printf("%d\n", a^b);//相同为0,不同为1    return;}//a^b=(0000 0001)2;

位运算~(取反)

void against(int a) {    printf("%d\n", ~a);//取反    return;}//~a(1111 1011)2,根据反码,补码可得为-5;

位运算>>(右移:低位去n,高位补0或1)

void rightmove(int a) {    printf("%d\n", a >>2 );//右移,去掉低二位,高位补0或1    return;}//a>>2=(0000 0001)2;

位运算 <<(左移:高位去n,低位补0)

void leftmove(int a) {    printf("%d\n", a << 2);//左移,去掉高二位,低位补0;    return;}//a<<2=(0001 0000)2;

下面是用来测试的主函数,大家可以用来测试

void main() {    int a, b;    int n;    scanf("%d", &n);    printf("please input two int\n");    scanf("%d%d", &a, &b);    switch (n) {    case 1: and (a, b); break;    case 2: either(a, b); break;    case 3: other(a, b); break;    case 4: against(a); break;    case 5: rightmove(a); break;    case 6: leftmove(a); break;    default:break;    }    return;}
2 0