二进制状态压缩,是指将一个长度为m的bool数组用一个m为的二进制整数表示并存储的方法。其运算简便,节省程序运行时间和空间。 k指从后向前数第k位(从0开始) 操作运算取出整数n在二进制表示下的第k位(n >> k) & 1取出整数n在二进制表示下的0 ~ k - 1位(后k位)n & ((1 << k) - 1)把整数n在二进制表示下的第k位取反n xor (1 << k)对整数n在二进制表示下的第k位赋值为1n or (1 << k)对整数n在二进制表示下的第k位赋值为0n & (~(1 << k)) 以12(1100)为例:k指从后向前数第k位(从0开始) 操作运算过程结果取出第1位:(12 >> 1)-> (0110)& 1 -> (0000) -> 00取出后3位:(1 << 3)-> (1000) - 1 -> (0111) & 11000100(4)把第1位取反(1 << 1)-> (0010) xor 1100 -> 11101110(14)把第1位赋值为1(1 << 1) -> (0010) or 1100 -> 11101110(14)把第3位赋值为0(1 << 3) -> ~(1000) -> 0111 & 1100 -> 01000100(4) 以上来源于《算法竞赛进阶指南》,个人只做整理分析。