1、位运算符

  • 位运算符只能作用域整型或者字符型,不能浮点型

    & 按位与

  • 清零

    1. 1010

    & 0000

    0000
    
  • 保持原值

     1010
    

    & 1111

     1010
    

| 按位非

  • 保持原值

    1010
    

    | 0000

    1010
    
  • 全部取1

     1010
    

    | 1111

     1111
    

^ 按位异或

  • 保持原值

    1010
    

    ^ 0000

    1010
    
  • 取反

     1010
    

    ^ 1111

     0101
    

~ 取反

<< 左移

>> 右移

2、位运算常用

大小写切换

  • 小写比大写的ASCII多32

      // 大写转小写
      char lower = 'D' ^ 0b00100000;
      printf("%c",lower);
    
      // 小写转大写
      char upper = 'D' & 0b11011111;
      printf("%c",upper);
    

    交换变量

      int a = 0b00000101;//5
      int b = 0b00000011;//3
      a = a ^ b; // 0110=6
      b = b ^ a; // 0101=5
      a = a ^ b; // 0011=3