• 位运算符


    位运算概述

    从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。

    符号 描述 运算规则
    & 两个位都为1时,结果才为1
    | 两个位都为0时,结果才为0
    ^ 异或 两个位相同为0,相异为1
    ~ 取反 0变1,1变0
    << 左移 各二进位全部左移若干位,高位丢弃,低位补0
    >> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

    指定位置的位运算

    1. 将 x 最右边的 n 位清零:x & (~0 << n)
    2. 获取 x 的第 n 位值(0 或者 1): (x >> n) & 1
    3. 获取 x 的第 n 位的幂值:x & (1 << n)
    4. 仅将第 n 位置为 1:x | (1 << n)
    5. 仅将第 n 位置为 0:x & (~ (1 << n))
    6. 将 x 最高位至第 n 位(含)清零:x & ((1 << n) - 1)

    实战位运算要点

    1. 判断奇偶:

      • x % 2 == 1 —> (x & 1) == 1
      • x % 2 == 0 —> (x & 1) == 0
    2. x >> 1 —> x / 2.

    即: x = x / 2; —> x = x >> 1;

    `mid = (left + right) / 2; —> mid = (left + right) >> 1; `
    
    1. X = X & (X-1) 清零最低位的 1

    2. X & -X => 得到最低位的 1

    3. X & ~X => 0

  • 相关阅读:
    42 最大子数组Ⅱ
    笔试之const问题
    笔试中sizeof求字节数的问题
    40 用栈实现队列
    38 搜索二维矩阵Ⅱ
    25.Remove Nth Node From End of List(删除链表的倒数第n个节点)
    29.最小的K个数
    28.数组中出现次数超过一半的数字
    27.字符串的排列
    26.二叉搜索树与双向链表
  • 原文地址:https://www.cnblogs.com/zhaohaiyu/p/13746045.html
Copyright © 2020-2023  润新知