二进制状态压缩bool数组

  • 二进制状态压缩,是指将一个长度为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)
  • 以上来源于《算法竞赛进阶指南》,个人只做整理分析。
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值