Программирование >>  Обработка исключительных ситуаций 

1 ... 14 15 16 [ 17 ] 18 19 20 ... 142


ПРИМЕЧАНИЕ-

Обратите внимание на то, что операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения.

Очень интересно формируется результат операций отношения для особых случаев вещественных значений. Например, если один из операндов равен NaN, результатом для всех операций, кроме ! = , будет false (для операции != результат равен true).

Очевиден факт, что для любых операндов результат операции х ! = у всегда равен результату операции ! (х == у), однако если один или оба операнда равны NaN, для операций <, >, <= и >= этот факт не подтверждается. Например, если х или у равны NaN, то х < у даст false, а ! (х >= у) - true.

Другие особые случаи рассматриваются следующим образом:

значения +0 и -0 равны;

значение -со меньше любого конечного значения и равно другому значению -оо;

значение +оо больше любого конечного значения и равно другому значению +со.

Поразрядные логические операции

Поразрядные логические операции (&, , Л) применяются к целочисленным операндам и работают с их двоичными представлениями. При выполнении операций операнды сопоставляются побитно (первый бит первого операнда с первым битом второго, второй бит первого операнда со вторым битом второго и т. д.). Стандартные операции определены для типов int, ui nt, long и ulong.

При поразрядной конъюнкции, или поразрядном И (операция обозначается &), бит результата равен 1 только тогда, когда соответствующие биты обоих операндов равны 1.

При поразрядной дизъюнкции, или поразрядном ИЛИ (операция обозначается ) , бит результата равен 1 тогда, когда соответствующий бит хотя бы одного из операндов равен 1.

При поразрядном исключающем ИЛИ (операция обозначается ) бит результата равен 1 только тогда, когда соответствующий бит только одного из операндов равен 1.

Пример применения поразрядных логических операций представлен в листинге 3.6.

Листинг 3.6. Поразрядные логические операции using System:

namespace ConsoleApplicationl { class Classl

{ static void MainO

Console.WriteLineC 6 & 5) Результат 4

Console.WriteLineC 6 5 ) Результат 7

Console.WriteLineC 6 5 ) Результат 3



Условная операция

Условная операция (? :) - тернарная, то есть имеет три операнда. Ее формат операнд 1 ? операнд 2 : операндЗ

Первый операнд - выражение, для которого существует неявное преобразовани к логическому типу. Если результат вычисления первого операнда равен true, TI результатом условной операции будет значение второго операнда, иначе - третье го операнда. Вычисляется всегда либо второй операнд, либо третий. Их тип мо жет различаться.

Тип результата операции зависит от типа второго и третьего операндов:

если операнды одного типа, он и становится типом результата операции ;

иначе, если существует неявное преобразование типа от операнда 2 к операн ду 3, но не наоборот, то типом результата операции становится тип операнда ;

Это наиболее часто используемый вариант применения тернарной операции.

Условные логические операции

Условные логические операции И (&&) и ИЛИ (11) чаще всего используются с one рандами логического типа. Результатом логической операции является true шп false. Операции вычисляются по сокращенной схеме.

Результат операции логическое И имеет значение true, только если оба операнд; имеют значение true. Результат операции логическое ИЛИ имеет значение true если хотя бы один из операндов имеет значение true.

ВНИМАНИЕ-

Если значения первого операнда достаточно, чтобы определить результат опера ции, второй операнд не вычисляется. Например, если первый операнд операции \ равен false, результатом операции будет false независимо от значения второй операнда, поэтому он не вычисляется.

Пример применения условных логических операций представлен в листинге 3.7.

Листинг 3.7. Условные логические операции using System;

namespace ConsoleApplicationl { class Classl

{ static void MainO {

Console WriteLineC true & & true ); Результат true

Console WriteLineC true & & false ); Результат false

Console WriteLineC true 1 1 true ); Результат true

Console WriteLineC true J 1 false ); Результат true



Другой пример применения условной операции: требуется, чтобы некоторая целая величина увеличивалась на 1, если ее значение не превышает п, а иначе принимала значение 1. Это удобно реализовать следующим образом: i = (i < n) ? i + 1: 1;

Условная операция правоассоциативна, то есть выполняется справа налево. Например, выражение а ? b : с ? d : е вычисляется как aTbcid).

Операции присваивания

Операции присваивания ( = , + = , -=, *- и т. д.) задают новое значение переменной2. Эти операции могут использоваться в программе как законченные операторы.

Формат операции простого присваивания (=):

переменная = выражение

Механизм выполнения операции присваивания такой: вычисляется выражение и его результат заносится в память по адресу, который определяется именем переменной, находящейся слева от знака операции. То, что ранее хранилось в этой области памяти, естественно, теряется. Схематично это полезно представить себе так:

Переменная <- Выражение

Напомню, что константа и переменная являются частными случаями выражения.

1 Строго говоря, такой хитрой записи следует избегать. Программа не должна напоминать шараду.

А также свойству, событию или индексатору, которые мы рассмотрим в свое время.

иначе, если существует неявное преобразование типа от операнда 3 к операнду 2, но не наоборот, то типом результата операции становится тип операнда 2;

иначе возникает ошибка компиляции.

Условную операцию часто используют вместо условного оператора if (он рассматривается в следующей главе) для сокращения текста программы.

Пример применения условной операции представлен в листинге 3.8.

Листинг 3.8. Условная операция using System;

namespace ConsoleApplicationl { class Classl

{ static void MainO

int a = 11. b = 4;

int max = b > a ? b : a;

Console.WriteLineC max ); Результат 11



1 ... 14 15 16 [ 17 ] 18 19 20 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика