用二进制表示状态

用二进制位表示状态

使用条件

条件一:保证二进制位足够多。
条件二:如果用的是 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
posted @ 2022-11-13 09:12  骁峰  阅读(171)  评论(0编辑  收藏  举报