位运算

位运算

按位与

两数相同位都为1则为1,否则为0

a&b ----------> 二进制

如3&4 -----------> 0010&0011 -------->0010--------->3

用途

  1. 清零
    • 与0按位与
  2. 取一个数的指定位
    • 比如取10101110的低四位,只需要找到低四位都为1,其余为0的数按位与
  3. 判断奇偶
    • 根据末位0还是1判断,1为奇数,0为偶数可以使用a&1判断

按位或

a|b

两者相同位中有一个为1,则为1,否则为0

用途

  • 将一个数据的某些位设置为1,比如要将10101110低四位设置为1,则找到一个数低四位都为1,其余为0的00001111

按位异或

值相同为0,值不同为1

a^b

用途:

  1. 翻转指定位

    比如将数 X=1010 1110 的低4位进行翻转,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=00001111,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到

  2. 与0相异或值不变

    例如:1010 1110 ^ 0000 0000 = 1010 1110

  3. 交换两个数

    举例

    void Swap(int &a, int &b){

    ​ if (a != b)

    ​ {

    ​ a ^= b;

    ​ b ^= a;

    ​ a ^= b;

    ​ }

    ​ }

按位取反

该数中 0的位置变为 1;1 的位置变为 0

~a

取反运算的用途:

  • 使一个数的最低位为零使a的最低位为0,可以表示为:a & 1。1的值为 1111 1111 1111 1110,再按”与”运算,最低位一定为0。因为” ~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。

按位左移

将该数 a左移 b 位,正数左移后为正数,负数左移后为负数

a<<b

按位右移

将该数 a 右移 b位,正数右移后为正数,负数右移后为负数。不论正负,都下取整

a>>b

该数是 0则为 1 ;否则为 0

!a

posted @ 2023-01-14 09:57  、怪咖  阅读(38)  评论(0)    收藏  举报