状压dp常用位运算技巧

  1. n & (1 << i) 这句话的意思是二进制中, 取出 \(n\) 的第 \(i + 1\) 位.
    比如 \(n = 14\) , \(i = 3\) , 那么因为 \((14)_2 = (1110)_2\) ,所以结果是 \((1000)_2 = (8)_{10}\)

  2. x & y 取出 \(x\)\(y\) 中同一位置上都为 \(1\)
    \(x = 43 = (101011)_2,\ y = 37 = (100101)_2\)
    \(\ \ \ (101011)_2\)
    \(\&(100101)_2\)
    \(----\)
    \(\ \ \ (100001)_2 = (33)_{10}\)

  3. x & (y << 1) 取出 \(x\)\(y\) 左移一位中同一位置上都为 \(1\)
    \(x = 43 = (101011)_2,\ y = 37 = (100101)_2, \ y << 1 = (1001010)_2\)
    \(\ \ \ (0101011)_2\)
    \(\&(1001010)_2\)
    \(----\)
    \(\ \ \ (0001010)_2 = (10)_{10}\)

  4. x & (y >> 1) 取出 \(x\)\(y\) 右移一位中同一位置上都为 \(1\)
    \(x = 43 = (101011)_2,\ y = 37 = (100101)_2, \ y >> 1 = (10010)_2\)
    \(\ \ \ (101011)_2\)
    \(\&(010010)_2\)
    \(----\)
    \(\ \ \ (000010)_2 = (2)_{10}\)

posted @ 2022-05-11 21:29  聂天泽  阅读(34)  评论(0编辑  收藏  举报