我正在审查我们的承包商的一些代码:
if (userLists != null)
{
Int32 numberOfItems = userLists.Count;
if ((numberOfItems & 1) == 1)
{
var emptyList = new tblList();
userLists.Add(emptyList);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在努力理解这一点,所以,如果我有这个权利,有人可以与我确认吗?
如果是这样(WTFFFFFFFFFFFFFFFFFFFF !!!!!!!!!!),可以重构为
if (numberOfItems == 1)
{
..
}
Run Code Online (Sandbox Code Playgroud)
但即便如此,因为我不想要一个带有"空"项目的清单.
那么我是否正确阅读了这段代码?
哦,再次感叹使用Int32vs Int:(但我离题了).
这&就是所谓的按位运算符.而运算符&&测试两个布尔值:
TRUE && FALSE => FALSE
TRUE && TRUE => TRUE
Run Code Online (Sandbox Code Playgroud)
该&运营商可以在整数值工作:
00101101 (45)
& 01011011 (91)
---------------
= 00001001 (9)
Run Code Online (Sandbox Code Playgroud)
每个位都有布尔运算(和).因此,对于您的代码示例,它会询问"最后一位是1吗?" - 也就是说"这很奇怪吗?" 例如,如果数字是23:
00010111 (23)
& 00000001 (1)
---------------
= 00000001 (1)
Run Code Online (Sandbox Code Playgroud)
所以它添加到列表中因为1 == 1.但如果数字是22:
00010110 (22)
& 00000001 (1)
---------------
= 00000000 (0)
Run Code Online (Sandbox Code Playgroud)
所以它不会添加到列表中.