Ich finde schwierig zu verstehen, wie die "&" Betreiber in Bezug auf diesen Code funktioniert:C# bitweise AND-Operator ‚&‘ Logik
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
}
}
}
, die diejenigen, die Fälle sind, wenn es eintritt, die, wenn die Bedingung und diejenigen, wo es nicht ist? und warum?
Ich habe bereits den Debugger darauf verwendet, es ist die Logik dahinter, dass es nicht klar ist. Was sie tut, ist:
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 }
Warum probieren Sie es nicht einfach mit dem Debugger aus? – HimBromBeere
Was ist der Sinn der Listen, wenn Sie nur die Anzahl verwenden? –
Es heißt der Bitwise AND Operator und funktioniert wie '72 & 184 = 8' =' 01001000 & 10111000 = 00001000' –