我很好奇下面的比较究竟是什么,尽可能详细,特别是关于0x2和&人物以及他们到底做了什么,
if [ $((${nValid} & 0x1)) -eq 1 ]; then
#...snip...
fi
if [ $((${nValid} & 0x2)) -eq 2 ]; then
#...snip...
fi
解决方法:
它以每比特为基础测试nValid.
按位AND运算符(&)表示逐位运算符将进行AND比较.因此,如果nValid是一个字节(8位)值,那么请查看二进制操作:
nValue & 0b00000001
如果nValue为42,那么操作将如下所示
(nValue = 0b00101010) & 0b00000001 => 0b00000000 // (does not have the last bit set)
(nValue & 0b00000001) == 0b00000001 // false
而对于第二个(nValid& 0x2)
(nValue = 0b00101010) & 0b00000010 => 0b00000010 // (has the 2nd-to-last bit set)
(nValue & 0b00000010) == 0b00000010 // true
这对于测试变量中的标志非常有用;通常使用AND通过隔离位来检查标志,使用OR来组合标志.
0b00001000 | 0b00000010 | 0b00000001 => 0b00001011
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。