7. 位运算 0️⃣1️⃣

运算符和优先级

优先级从高到低:

  1. 按位取反(~
  2. 左移(<<)、有符号右移(>>
  3. 按位与(&)、按位或(|)、按位异或(^

常用操作

位运算的累加:ans = ans | X;,通常 ans 起始为 0, X 是计算后的结果。 位运算的遍历:右移 nn = n >> 1;并不断取 n 的最后一个数位n & 1。 检查最后一位是否为 1:n & 1。 检查第 i 位是否为 1: n & (1 << i)。 改变某一位所在的位置(通常是 1):1 << X,把 1 移动到从右到左的第 X 位。 把 n 的二进制最低位的 1 变为 0: n & (n - 1)

常用函数和常数

统计 1 的个数:__builtin_popcount(x ^ y) 翻转数组时使用的掩码:

   const uint32_t M1 = 0x55555555;  // 01010101010101010101010101010101
   const uint32_t M2 = 0x33333333;  // 00110011001100110011001100110011
   const uint32_t M4 = 0x0f0f0f0f;  // 00001111000011110000111100001111
   const uint32_t M8 = 0x00ff00ff;  // 00000000111111110000000011111111
   const uint32_t M16 = 0x0000ffff; // 00000000000000001111111111111111

位运算题目

【136.只出现一次的数字】

【371. 两整数之和】

-

results matching ""

    No results matching ""