ВУЗ:
Составители:
Рубрика:
52
//j2 = !j1; // ошибка !
int j4 = 7, j5;
j5 = ~j4; // j5 = -8
В этом фрагменте закомментированы операторы, приводящие к
ошибкам. В первом случае была сделана попытка применения операции
побитового отрицания к выражению типа bool, во втором – логическое
отрицание применялось к целочисленным данным. И то, и другое в C#
незаконно. Обратите внимание на разную интерпретацию побитового
отрицания для беззнаковых и знаковых целочисленных типов. Для пе-
ременных j5 и j2 строка битов, задающая значение – одна и та же, но
интерпретируется по-разному.
Бинарные логические операции: && – условное И и || – условное
ИЛИ, определены только над данными типа bool. Операции называют-
ся условными или краткими, поскольку, будет ли вычисляться второй
операнд, зависит от уже вычисленного значения первого операнда. В
операции &&, если первый операнд равен значению false, то второй
операнд не вычисляется и результат операции равен false. Аналогич-
но, в операции ||, если первый операнд равен значению true, то вто-
рой операнд не вычисляется и результат операции равен true. Цен-
ность условных логических операций заключается не в их эффективности
по времени выполнения. Часто они позволяют вычислить логическое
выражение, имеющее смысл, но в котором второй операнд не опреде-
лен. Например, рассмотрим задачу поиска элемента массива. Заданный
элемент в массиве может быть, а может и не быть. Вот типичное реше-
ние этой задачи:
//Условное And – &&
int[] ar= {1,2,3};
int search = 7, i=0;
// search – заданное значение
while ((i < ar.Length) && (ar[i]!= search)) i++;
if(i < ar.Length)
Console.WriteLine("Значение найдено");
else
Console.WriteLine("Значение не найдено");
Если значение переменной search не совпадает ни с одним из
значений элементов массива ar, то последняя проверка условия цикла
while будет выполняться при значении i, равном ar.Length. В этом
случае первый операнд получит значение false, и, хотя второй опе-
ранд при этом не определен, цикл нормально завершит свою работу.
Второй операнд не определен в последней проверке, поскольку индекс
элемента массива выходит за допустимые пределы (в C# индексация
Страницы
- « первая
- ‹ предыдущая
- …
- 50
- 51
- 52
- 53
- 54
- …
- следующая ›
- последняя »