Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс_ред1 С#.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.8 Mб
Скачать

Унарное логическое отрицание

Оператор унарного логического отрицания вычисляет значение своего логического операнда, а затем изменяет его на противоположное значение. Вот пример использования этого оператора:

bool isBlackColor = true;

bool check = !isBlackColor;

Здесь мы вначале записали в логическую переменную isBlackColor значение true, а затем использовали это значение и оператор отрицания для инициализации логической переменной check. В результате переменная check будет содержать значение false.

Оператор унарного логического отрицания может использоваться с любым логическим выражением, а также с логическими литералами:

bool isBlackColor = !true;

Подробнее логические выражения рассматриваются далее.

Унарная поразрядная операция дополнения

Этот оператор вычисляет поразрядное дополнение своего операнда. В результате выполнения этой операции состояние всех разрядов операнда будет изменено на противоположное.

Вот пример использования унарной поразрядной операции дополнения:

uint op = 0х5а5а;

uint compl = ~ор;

Операции с отдельными разрядами мы также рассмотрим подробнее позже.

Преобразование типа выражения

В процессе обработки программы транслятор выполняет явные и неявные преобразования типов данных. Например, в следующей строке перед сложением целочисленное значение 5 неявным образом преобразуется в тип с плавающей точкой:

long х = 1.4 + 5;

В языке С# имеется унарный оператор, позволяющий выполнять явное преобразование типов данных. Он используется следующим образом:

long х = 1.4 + (float)5;

Здесь при помощи конструкции (float) мы указали, что перед сложением необходимо преобразовать числовой литерал 5 в литерал с плавающей точкой типа float.

Вопросы, связанные с преобразованием типов данных в С# имеют достаточно важное значение, поэтому позже мы рассмотрим их более подробно.

Пример использования унарных операторов

Рассмотрим текст программы, демонстрирующей использование некоторых унарных операторов:

using System;

namespace UnaryOp

{

class UnaryOpApp

{

static void Main(string[] args)

{

int x = 5;

int у = ++x;

System.Console.WriteLine("x = {0},\ty = {1}", x, y);

int x1 = 5;

int y1 = x1++;

System.Console.WriteLine("x1 = {0},\ty1 = {1}", x1, y1);

uint op = 0x5a5a;

uint со = ~op;

System.Console.WriteLine(" op = {0:X}, со = {1:X}", op, со);

System.Console.ReadLine();

}

}

}

Первые два фрагмента показывают отличия между префиксной и постфиксной унарной операцией инкремента. Третий фрагмент демонстрирует выполнение унарной поразрядной операции дополнения. Обратите внимание, что значение операнда (переменной ор) задано в шестнадцатеричном виде и равно 0x5а5а. После выполнения преобразования состояние всех разрядов операнда изменяется на противоположное.

Результат работы этой программы представлен ниже:

Как видите, префиксная и постфиксная операции инкремента не эквивалентны. Что же касается унарной поразрядной операции дополнения, то она выполнилась так, как мы ожидали — состояние всех разрядов изменилось на противоположное (или, как еще говорят, оказалось инвертированным).

Чтобы отобразить результат выполнения операции дополнения в шестнадцатеричном виде, мы указали в строке формата методу WriteLine спецификатор формата X, отделив его от номера параметра двоеточием:

System.Console.WriteLine(" op = {0:X}, со = {1:X}", op, со);

Метод WriteLine обладает и другими достаточно широкими возможностями форматирования результата, выводимого на экран, будем их использовать и пояснять их применение по мере необходимости.