• 学C语言没怎么学位运算,学单片机也没怎么补位运算,直到做了moeCTF的maze题目,才发现有位压缩,来补缺补漏。先加密,等写完再解密

C语言位运算符

  • 先来介绍一下C语言中的位运算符号,这写符号都是按照一个一个来进行运算的,所以被称为位运算符,相应的运算就被称为位运算
  • 先来介绍一下位运算符:
    • ~:按位取反,也就是二进制位中原来的1变成0,原来的0变成1,这是一个一元运算符
    • <<:左移运算,就是将二进制位左移,扩大2**n倍,这是一个一元运算符
    • >>:右移运算,就是将二进制位右移,缩小2**n倍,这是一个一元运算符
    • &:按位与运算,将两个二进制数的相同位进行与运算,相同位都为1结果的相同位才为1,其他情况1&0=0,0&0=0,0&1=0。二元运算符
    • |:按位或运算,将两个二进制数的相同位进行或运算,相同位都为0结果的相同位才为0,其他情况结果的相同位都为1,二元运算符
    • ^:异或运算,将两个二进制数的相同位进行异或运算,相同位只有满足1^0或者0^1结果的相同位才为1,二元运算符
    • 剩下的运算符和+=是一个性质:
      • &=a&=b进行a&b运算,然后将结果保存在a
      • |=a|=b进行a|b运算,将结果保存在a
      • ^=a^=n进行a^b运算,将结果保存在a
      • >>=a>>=b进行a>>b运算,将结果保存在a
      • <<=a<<=b进行a<<b运算,将结果保存在aa