我刚刚找到了一个代码,其中"按位和"完成,但无法清楚地理解逻辑.
if( (value1 & value2 ) == value2)
{
//Some code.
}
Run Code Online (Sandbox Code Playgroud)
我知道二进制AND操作是在变量上完成的.但我的问题是,如果"value1"和"value2"之间的"按位和"产生"value2",我应该推断出哪些关于价值的信息?
由于==具有更高的优先级&,表达式是有效的:
(value1 & (value2 == value2))
Run Code Online (Sandbox Code Playgroud)
内部表达式将始终求值为true,因此数值将为1.然后,您将value1 & 1在布尔上下文中测试是否设置了最低有效位.
然而,这可能不是预期的.它最有可能是:
((value1 & value2) == value2)
Run Code Online (Sandbox Code Playgroud)
第一部分返回具有仅在两个中设置的位集合中的值value1和value2.然后它将该值与平等值进行比较value2.
因此,如果设置的位是设置的位value1的超集,则表达式求值为true value2.例如,如果您的变量包含一组布尔标志,并且您想知道是否启用了一组特定的标志,那么这可能很有用.
所有测试的值位都设置在另一个值中.
一些简单的例子:
1111 & 1010 = 1010 1110 & 1010 = 1010 1010 & 1010 = 1010 0010 & 1010 = 0010 1000 & 1010 = 1000
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |