2016-03-21 17 views
0
Ben '&' operatör bu koda ilişkin nasıl çalıştığını anlamak zor buluyorum

: olanlar davaları olanC# lojik AND operatörü '&' mantığı

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 
     } 

    } 
} 

o girerse durum ve olmayanlar? ve neden?

Üzerinde hata ayıklayıcısını zaten kullandım, bunun ardındaki mantık açık değil. Yaptığı şey şudur: nasıl & biraz akıllıca ve operatör çalışmalarını anlamamız gerekir

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 } 
+0

Neden hata ayıklayıcısını kullanarak bunu denemiyorsunuz? – HimBromBeere

+0

Sadece sayıları kullanıyor iseniz listeler nedir? –

+2

O Bitwise VE operatör denilen ve benzeri işleri oluyor '72 & 184 = 8' =' 01001000 & 10111000 = 00001000' –

cevap

3

.

Bitwise AND Operator: &

lojik AND operatörü (&)

ikinci işlenen karşılık gelen bit ilk işlenen her bit karşılaştırır. Her iki bit 1 ise, ilgili sonuç bit tekabül sonuç biraz basit tutabilmek için 0'a

olarak ayarlanır, Aksi 1 olarak ayarlanmış Açıklamaya tek bayt aldı edilir.

İlk durumda

var cnt = 1 
var l = 1 
if ((cnt & l)==0){ // false } 

00000001 
00000001 
=============== 
00000001 

1 sıfıra eşit değildir olarak sıfır ile 1 yanlış dönecektir 00000001 karşılaştırılması.

İkinci Örnek

var cnt = 1 
var l = 2 
if ((cnt & l)==0){ // true } 

00000001 
00000010 
=============== 
00000000 

0 sıfıra eşit olduğu için doğru döndürür sıfır ile 0 00000000 karşılaştırılması.

+0

[İşte OP için bir tutuş] (http://www.cprogramming.com/tutorial/bitwise_operators.html) hakkında sorduğum mantıktır, c ve C++ içindir ama bitler bittir. –