【发布时间】:2016-03-21 10:44:30
【问题描述】:
我很难理解 ´&´ 运算符与此代码的关系:
for(int cnt = 0; cnt < (1 << somelist.Count()); ++cnt)
{
for (int i = 0; i < somelist.Count(); ++i)
{
// 1 << 0 -- 1 -> 1
// 1 << 1 -- 10 -> 2
// 1 << 2 -- 100 -> 4
// 1 << 3 -- 1000 -> 8
// 1 << 4 -- 10000 -> 16
// 1 << 5 -- 100000 -> 32
var l = (1 << i);
if ((cnt & l) == 0)
{
// when is it getting here?
// some code to execute
}
}
}
哪些是进入 if 条件的情况,哪些是不进入的情况?为什么?
我上面已经用过调试器了,不清楚是背后的逻辑。它的作用是:
e.g.
var cnt = 0
var l = 1
if ((cnt & l)==0){ // true }
var cnt = 1
var l = 1
if ((cnt & l)==0){ // false }
var cnt = 1
var l = 2
if ((cnt & l)==0){ // true }
var cnt = 1
var l = 4
if ((cnt & l)==0){ // true }
var cnt = 3
var l = 2
if ((cnt & l)==0){ // false }
var cnt = 3
var l = 4
if ((cnt & l)==0){ // true }
【问题讨论】:
-
为什么不直接使用调试器试一试?
-
如果您只使用计数,列表的意义何在?
-
它被称为按位与运算符,工作方式类似于
72 & 184 = 8=01001000 & 10111000 = 00001000 -
@MatthewWatson 检查上次编辑
-
@HimBromBeer 检查上次编辑。我确实使用了调试器。这就是我要问的 & 运算符背后的逻辑
标签: c# logic operators unary-operator