Ответ 1
Амперсанд выполняет побитовое И по целым числам в своих двоичных представлениях. Труба побитовое ИЛИ.
Смотрите здесь, что означают эти побитовые операции: http://en.wikipedia.org/wiki/Bitwise_operation
Я увидел пару вопросов здесь о различии между && и операторы в С#, но я все еще запутался, как он используется, и какой результат приводит к разным ситуациям. Например, я просто заметил следующий код в проекте
bMyBoolean = Convert.ToBoolean(nMyInt & 1);
bMyBoolean = Convert.ToBoolean(nMyInt & 2);
Когда это приведет к 0 и при > 0? Какова логика этого оператора? Каковы различия между оператором "|"?
bMyBoolean = Convert.ToBoolean(nMyInt | 1);
bMyBoolean = Convert.ToBoolean(nMyInt | 2);
Можем ли мы использовать & &, || операторы и получить те же результаты (возможно, с другим кодом)?
Амперсанд выполняет побитовое И по целым числам в своих двоичных представлениях. Труба побитовое ИЛИ.
Смотрите здесь, что означают эти побитовые операции: http://en.wikipedia.org/wiki/Bitwise_operation
&&
является условным и используется в операторах 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
& и | бит. Вы должны использовать его в бит-масках. && и || это логические операции, поэтому вы можете использовать его только для значений bool.
Пример операции с битами:
var a = 1;
var b = 2;
var c = a|b;
в двоичном формате это означает, что a = 00000001, b = 00000010 c = 00000011
Итак, если вы используете битмаску c, он будет передавать значения 1, 2 или 3.
Еще одно отличие состоит в том, что и оператор вычисляет логическое побитовое И его операндов, если операнды не являются bool (целое в вашем случае)
& 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
Другие ответы объясняют вам разные между && и &, поэтому предположим, что вы это понимаете. Здесь я просто попытаюсь объяснить ваш конкретный случай.
Первый случай
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
, вы скомпилируете ошибки.
Вот что-то интересное для и. бит-мудрый, как и быть, он может быть использован для 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