用二进制表示状态
用二进制位表示状态
使用条件
条件一:保证二进制位足够多。
条件二:如果用的是 int 类型,最多可以使用的位数是31位,最高位是符号位不能用。若要用32位,要用 unsigned int 类型。
如何检查第i位是1还是0呢
用表达式:
state >> i & 1
常用语句:
if((state>>i&1)==0) balabala;
if((state>>i&1)==1) balabala;
如何对第i位置1呢?
表达式:state + (1<<i);,注意 + 号优先级高于 << ,还有要确保state 第 i 位是 0 才行,否则加 1 导致进位,就全都错误了。
常用表达式:
if((state>>i&1)==0) state + (1<<i); //一定要确保state之前的第 i 位是 0
如何对第 i 位置 0 呢?
表达式:state - (1<<i);,注意 - 号优先级高于 <<,还有确保state第 i 位 是 1 才行,否则减1也会导致全部错位的严重后果。
常用表达式:
if((state>>i&1)==1) state - (1<<i);//一定要确保state之前的第 i 位是 1