С# и пояснение оператора

Я увидел пару вопросов здесь о различии между && и операторы в С#, но я все еще запутался, как он используется, и какой результат приводит к разным ситуациям. Например, я просто заметил следующий код в проекте

bMyBoolean = Convert.ToBoolean(nMyInt & 1);
bMyBoolean = Convert.ToBoolean(nMyInt & 2);

Когда это приведет к 0 и при > 0? Какова логика этого оператора? Каковы различия между оператором "|"?

bMyBoolean = Convert.ToBoolean(nMyInt | 1);
bMyBoolean = Convert.ToBoolean(nMyInt | 2);

Можем ли мы использовать & &, || операторы и получить те же результаты (возможно, с другим кодом)?

Ответ 1

Амперсанд выполняет побитовое И по целым числам в своих двоичных представлениях. Труба побитовое ИЛИ.

Смотрите здесь, что означают эти побитовые операции: http://en.wikipedia.org/wiki/Bitwise_operation

Ответ 2

&& является условным и используется в операторах if и while

if(x>1 && y<3)

это означает, что x должно быть больше 1 и y меньше 3, удовлетворяют обоим условиям

if(x>1 || y<3)

удовлетворяют одному из них

Однако, и | побитовые И и ИЛИ соответственно. ex:

 1 | 0  => 1
 1 & 0  => 0
 1 & 1  => 1

если это применимо для прямых целых чисел, их соответствующее двоичное значение будет рассчитано и применено

2&1
=>   10  // the binary value of 2
     &
     01  // the binary value of 1
     --
     00  // the result is zero

Ответ 3

& и | бит. Вы должны использовать его в бит-масках. && и || это логические операции, поэтому вы можете использовать его только для значений bool.

Пример операции с битами:

var a = 1;
var b = 2;
var c = a|b;

в двоичном формате это означает, что a = 00000001, b = 00000010 c = 00000011

Итак, если вы используете битмаску c, он будет передавать значения 1, 2 или 3.

Ответ 4

Еще одно отличие состоит в том, что и оператор вычисляет логическое побитовое И его операндов, если операнды не являются bool (целое в вашем случае)

Ответ 5

& operator is BItwise AND, он выполняет манипуляции с битами. например 5 и 3

        0101    //5
        0011   //3
    ----------
5&3=    0001   //1

| operator is BItwise OR, он выполняет манипуляции с битами. 5 | 3

        0101    //5
        0011   //3
    ----------
  5|3=  0111   //7
Оператор

&& logical AND operator - it returns true if all conditions are true
например

       if((3>5)&&(3>4))   //returns true
       if((6>5)&&(3>4))   //returns false
Оператор

|| logical OR operator - it returns true if one of the conditions is true
например

   if((3>5)||(3>4))   //returns true
   if((6>5)||(3>4))   //returns true
   if((6>5)||(5>4))   //returns false

Ответ 6

Другие ответы объясняют вам разные между && и &, поэтому предположим, что вы это понимаете. Здесь я просто попытаюсь объяснить ваш конкретный случай.

Первый случай

bMyBoolean = Convert.ToBoolean(nMyInt & 1);

bMyBoolean false, когда nMyInt = 0, потому что:

  00 
& 01 
= 00;

Второй случай:

bMyBoolean = Convert.ToBoolean(nMyInt & 2);

bMyBoolean false, когда nMyInt = 0 или 1, потому что

  00 
& 10 
= 00;

Или:

  01 
& 10 
= 00;

Третий и четвертый случаи с побитовыми | тривиальны, потому что bMyBoolean всегда истинно с любым nMyInt

bMyBoolean = Convert.ToBoolean(nMyInt | 1);
bMyBoolean = Convert.ToBoolean(nMyInt | 2);

Вы не можете применять && или || в этом случае, поскольку они ограничены только для bool, вы скомпилируете ошибки.

Ответ 7

Вот что-то интересное для и. бит-мудрый, как и быть, он может быть использован для bool, как в примере ниже.

bool result = true;
result &= false;
Console.WriteLine("result = true & false => {0}", result );
//result = true & false => False

result = false;
result &= false;
Console.WriteLine("result = false & false => {0}", result );
//result = false & false => False


result = true;
result &= true;
Console.WriteLine("result = true & true => {0}", result );
//result = true & true => True