位运算符

&

位与:操作的两个位都是1,得到的结果就是1。其他情况结果都是0

#include <stdio.h>
int main() {
    int a = 2;  
    int b = 3;
    printf("%d\n", a & b); //把数变成了2进制数,进行操作,最后结果转换成10进制,得到2
    return 0;
}

位或:操作的两个位都是0,得到的结果就是0,其他情况结果就是1

#include <stdio.h>
int main() {
    int a = 2;
    int b = 3;
    printf("%d\n", a | b);
    return 0;
}

~(单目)

位非:位的值为1,结果变成0。值为0,结果变成1。

#include <stdio.h>
int main() {
    char a = 2;
    char b = 3;
    printf("%ud\n", ~a);
    return 0;
}

^

位异或:操作的两个位不相同,得到的结果就是1.其他情况都是0

#include <stdio.h>
int main() {
    int a = 2;
    int b = 3;
    printf("%d\n", a ^ b); //结果为1
    return 0;
}

#include <stdio.h>
int main() {
    int a = 2, b = 3;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    printf("a = %d\t,b = %d\n", a,b); //a与b的值做交换,可以使用^异或
    return 0;
}

<<

位左移:将左操作数据的数据位往左移动右操作数表示的位数,左边移出的数据位丢弃,右边补0

位左移 n 位,相当于乘 2 的 n 次幂

#include <stdio.h>
int main() {
    int a = 2;
    int b = 3;
    printf("%d\n", a << 1); //结果为4
    return 0;
}

>>

位右移:将左操作数据的数据位往右移动右操作数表示的位数,右边移出的数据位丢弃,正数左边补0,负数左边补1

位右移 n 位,相当于右操作数整除 2 的 n 次幂

#include <stdio.h>
int main() {
    int a = 2;
    int b = 3;
    printf("%d\n", b >> 1);
    return 0;
}
赞(1)
未经允许不得转载:阿昌技术分享 » 位运算符