7.3 位运算

来源:互联网 发布:数据库漏洞扫描软件 编辑:程序博客网 时间:2024/06/06 03:54

1.位运算

  • &:与
    • 如果 x = 1并且 y = 1,那么(x & y) = 1;否则 (x & y)= 0
  • |:或
    • 如果 x = 1 或者 y = 1,那么 (x | y)= 1;否则 (x | y)= 0
  • ~:取反
    • 把0变成1,1变成0
  • ^:异或
    • 如果 x == y,那么 (x ^ y)= 0;否则(x ^ y)= 1
  • <<:左移
    • x << 1 等价于 x *= 2,左移后 右边补0
  • >>:右移
    • x >> 1 等价于 x /= 2
    • 小于int的类型,以为以int的方式来做,结果是int
    • 对于unsigned类型,左边补0
    • 对于signed类型,左边补 最高位
    • 移位的位数不要用负数,没有定义这种行为:x << -2; // No!!
#include<stdio.h>int main(int argc, const char *argv){    unsigned char c= 0xAA;    printf(" c = %hhx\n", c); //  c = aa    printf("~c = %hhx\n", (char)~c);// ~c = 55    printf("~c = %hhx\n", (char)~c);// ~c = 55    return 0;}

2.输出一个数的二进制

#include<stdio.h>int main(int argc, const char *argv){    int number = 0xaa;    unsigned int mask = 1u<<31;    for(; mask; mask >>= 1){        printf("%d", number & mask ? 1 : 0);//00000000000000000000000010101010    }    printf("\n");    return 0;}
0 0