
- •Язык c# и структура простой программы
- •Что такое .Net Framework
- •Что такое с#
- •Создание первой программы на с#
- •Пространство имен System
- •С# как язык Объектно-Ориентированного Программирования (ооп)
- •Состав и назначение файлов проекта
- •Структура сборки
- •Элементы языка c#
- •Базовый синтаксис с#
- •Переменные
- •Числа без знака
- •Числа со знаком
- •Числа для финансистов
- •Текстовые символы
- •Логический тип данных
- •Литералы с плавающей точкой
- •Символьные литералы
- •Строковые литералы
- •Выражения и операторы с#
- •Инициализация переменных и оператор присваивания
- •Значение в левой части
- •Ввод данных с консоли
- •Математические операторы
- •Вычисление остатка при целочисленном делении
- •Унарные операторы
- •Унарное логическое отрицание
- •Составные операторы
- •Поразрядные операторы
- •Поразрядное логическое и
- •Поразрядное логическое или
- •Поразрядное логическое исключающее или
- •Унарная поразрядная операция дополнения
- •Поразрядный сдвиг
- •Пример использования поразрядных операторов
- •Логические операторы
- •Операторы отношения
- •Приоритеты операторов
- •Исполнители алгоритмов
- •Исполнитель Чертежник
- •Исполнитель Робот
- •Компьютер как формальный исполнитель алгоритмов
- •Блок-схема
- •Псевдокод
- •Необходимые свойства алгоритма
- •Понятие о временной сложности алгоритма
- •Примеры
- •Правила для определения сложности
- •Тернарный условный оператор
- •Применение логических операций
- •Конструкция выбора
- •Примеры применения оператора выбора
- •Объединение меток case
- •Пропущенный break
- •Пример программы: Простые числа
- •Пример обработки одномерного массива чисел
- •Использование генератора случайных данных
- •Использование оператора foreach
- •Типы задач обработки одномерных числовых массивов
- •Поиск элемента в массиве
- •Многомерные массивы
- •Базовые операции со строками
- •Методы типа string
- •Копирование и клонирование строк
- •Конкатенация строк
- •Извлечение подстроки
- •Вставка подстроки
- •Замена символов и строк
- •Удаление символов из строки
- •Удаление незначащих пробелов
- •Преобразование к верхнему и нижнему регистру
- •Выравнивание по левому и правому краю поля
- •Объединение массива строк
- •Разбор строки
- •Сравнение строк
- •Форматирование текстовых строк
- •Функции
- •Описание и использование функций
- •Возвращаемые значения
- •Передача параметров
- •Выходные параметры
- •Область действия переменных
- •Область действия переменных и управляющие конструкции
- •Рекурсия
- •Параметры функции Main()
- •Перегрузка функций
- •Перечислимый тип
- •Определение перечислимых типов
- •Структуры
- •Описание структур
- •Использование структур в качестве параметров функций
- •Использование структур в качестве возвращаемых значений функций
- •Функции структур
- •Файлы и потоки
- •Основные классы ввода и вывода
- •Классы для работы с потоками
- •Классы для работы с потоками текстовых символов
- •Работа с текстовыми файлами
Унарное логическое отрицание
Оператор унарного логического отрицания вычисляет значение своего логического операнда, а затем изменяет его на противоположное значение. Вот пример использования этого оператора:
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 обладает и другими достаточно широкими возможностями форматирования результата, выводимого на экран, будем их использовать и пояснять их применение по мере необходимости.