Каково различие между операторами & и && в С#
Я пытаюсь понять разницу между и && операторов в С#. Я искал в Интернете без особого успеха. Может ли кто-нибудь объяснить пример?
Ответы
Ответ 1
&
- побитовый оператор И. Для операндов целочисленных типов он будет вычислять побитовое И из операндов, и результат будет целочисленным. Для булевых операндов он будет вычислять логические и операнды. &&
является логическим оператором AND и не работает с целыми типами. Для булевых типов, где оба они могут быть применены, разница заключается в "коротком замыкании" свойства &&
. Если первый операнд &&
оценивается как false
, второй не оценивается вообще. Это не относится к &
:
bool f() {
Console.WriteLine("f called");
return false;
}
bool g() {
Console.WriteLine("g called");
return false;
}
static void Main() {
bool result = f() && g(); // prints "f called"
Console.WriteLine("------");
result = f() & g(); // prints "f called" and "g called"
}
||
аналогичен &&
в этом свойстве; он будет оценивать только второй операнд, если первый оценивает значение false.
Конечно, пользовательские типы могут перегружать этих операторов, заставляя их делать все, что им нужно.
Ответ 2
Настоятельно рекомендуем эту статью от Dotnet Mob: http://dotnetmob.com/csharp-article/short-circuit-evaluation-in-c/
- && является логическим оператором короткого замыкания
Для операций AND, если какой-либо из операндов оценивается как false, общее выражение вычисляется как false, поэтому нет необходимости оценивать остальные выражения аналогичным образом в операции OR, если любой из операндов, оцененных как true, а затем оставшаяся оценка может быть пропущена
- & оператор может использоваться как унарный, так и двоичный оператор. то есть унарный и может использоваться для получения адреса его операнда в небезопасном контексте.
Ответ 3
& является побитовым оператором и && & является логическим оператором, который применяется к операндам bool
.
Ответ 4
Друг Хай,
Оператор && (Логический оператор) используется в условных операторах.
Для экземпляра
if(firstName == 'Tilsan' && lastName == 'Fighter')
{
Response.Write("Welcome Tilsan The Fighter!");
}
Оператор Response.Write будет работать только в том случае, если обе переменные firstName и lastName соответствуют их условию.
В то время как для двоичных И-операций используется оператор и (Побитовый оператор), т.е. если мы пишем:
bool a, b, c;
a = true;
b = false;
c = a & b;
Response.Write(c); // 'False' will be written to the web page
Здесь первая операция Binary And будет выполняться для переменных a и b, а результирующее значение будет сохранено в переменной c.
Ответ 5
Легкий способ взглянуть на него логичен и будет оценивать обе стороны и независимо от того, является ли левая сторона ложной, тогда как короткое замыкание && будет оценивать только правую сторону, если левое верно.
d=0;
n=10;
// this throws divide by 0 exception because it evaluates the
// mod even though "d != 0" is false
if ( (d != 0) & (n % d) == 0 )
Console.Writeline( d + " is a factor of " + n);
// This will not evaluate the mod.
if ( (d != 0) && (n % d) == 0 )
Console.Writeline( d + " is a factor of " + n);
Ответ 6
В соответствии с - С# 4.0 Полное обращение Герберта Шильдта
& - Логический И Оператор
| - Логический оператор ИЛИ
& & - Короткое замыкание и оператор
|| - Короткое замыкание или оператор
Простой пример может помочь понять явления
using System;
class SCops {
static void Main() {
int n, d;
n = 10;
d = 2;
if(d != 0 && (n % d) == 0)
Console.WriteLine(d + " is a factor of " + n);
d = 0; // now, set d to zero
// Since d is zero, the second operand is not evaluated.
if(d != 0 && (n % d) == 0)
Console.WriteLine(d + " is a factor of " + n);
// Now, try the same thing without the short-circuit operator.
// This will cause a divide-by-zero error.
if(d != 0 & (n % d) == 0)
Console.WriteLine(d + " is a factor of " + n);
}
}
Здесь оператор и проверяет каждый операнд и && проверяет только первый операнд.
Как вы могли заметить, для операций "И" любой операнд, который является ложным, будет оценивать все выражение в false независимо от любого другого значения операндов в выражении.
Эта короткая замкнутая форма помогает оценить первую часть и достаточно умна, чтобы знать, нужна ли вторая часть.
Запуск программы приведет к ошибке divide-by-zero для последнего условия if, где проверяются оба операнда и оператор, и обработка исключений не выполняется для устранения того факта, что 'd' может быть 0 в любой точке время.
Тот же случай относится к '|' в С#.
Это немного отличается от C или С++, где '&' и '|' были побитовыми операторами И и ИЛИ. Однако С# также применяет побитовый характер and и | только для переменных int.
Ответ 7
Первый побитовый и второй boolean и.