Основы языка C# 2005. Евсеева О.Н - 67 стр.

UptoLike

Составители: 

71
{
//операции отрицания ~,!
bool b1, b2;
b1 = 2*2 == 4;
b2 = !b1;
//b2= ~b1;
uint j1 = 7, j2;
j2 = ~j1;
//j2 = !j1;
int j4 = 7, j5;
j5 = ~j4;
Console.WriteLine("uint j2 = " + j2 + " int j5 = " + j5);
} //Logic
В этом фрагменте закомментированы операторы, приводящие к ошибкам.
В первом случае была сделана попытка применения операции побитового
отрицания к выражению типа bool, во втором - логическое отрицание
применялось к целочисленным данным. И то, и другое в C# незаконно.
Обратите внимание на разную интерпретацию побитового отрицания для
беззнаковых и знаковых целочисленных типов. Для переменных j5 и j2 строка
битов, задающая значениеодна и та же, но интерпретируется по-разному.
Соответствующий вывод таков: uint j2 = 4294967288 int j5 = -8.
Бинарные логические операции «&&условное И» и «||условное ИЛИ»
определены только над данными типа bool. Операции называются условными
или краткими, поскольку, вычисление второго операнда зависит от уже
вычисленного значения первого операнда. Ценность условных логических
операций заключается в их эффективности по времени выполнения. Часто они
позволяют вычислить логическое выражение, имеющее смысл, но в котором
второй операнд не определен. Приведем в качестве примера классическую
задачу поиска по образцу в массиве, когда разыскивается элемент с заданным
значением (образец). Такой элемент в массиве может быть, а может и не быть.
Вот типичное решение этой задачи в упрощенном виде, но передающем суть
дела:
//Условное And - &&
int[ ] ar = { 1, 2, 3 };
int search = 7;
int i = 0;
while ((i < ar.Length) && (ar[i] != search)) { i++; }
if (i < ar.Length) Console.WriteLine("Образец найден");
else Console.WriteLine("Образец не найден");
Если значение переменной search (образца) не совпадает ни с одним из
значений элементов массива ar, то последняя проверка условия цикла while
будет выполняться при значении i, равном ar.Length. В этом случае первый
операнд получит значение false, и, хотя второй операнд при этом не определен,