Базовые операторы

Базовые операторы


Содержание


1. Какие виды или категории операторов существуют в языке C#?

В языке C# существуют следующие категории операторов:

  • арифметические операторы;
  • операторы отношения;
  • логические операторы;
  • операторы присваивания;
  • поразрядные операторы;
  • специальные операторы для особых случаев.

 


2. Какие операторы принадлежат к категории арифметических операторов?

В языке C# существуют следующие арифметические операторы:

+  - сложение
-  - вычитание
*  - умножение
/  - деление
%  - деление по модулю
-- - декремент
++ - инкремент

 


3. Примеры использования операторов сложения (+), вычитания (), умножения (*) и деления (/).

Операторы сложения (+), вычитания (), умножения (*) и деления (/) можно применять к любому встроенному числовому типу данных.

Пример 1. Операции над переменными целых типов.

int a, b, c;

a = 5;
b = 8;
c = a + b; // c = 13
c = a - b; // c = -3
c = a * b; // c = 40
c = a / b; // c = 0
с = 9/4;   // c = 2

Важно: деление целых чисел дает результат целого типа.

Пример 2. Операции над переменными, где есть данные с плавающей запятой.

double a, b, c;

a = 1;
b = 2;
c = a + b; // c = 3.0
c = a - b; // c = -1.0
c = a * b; // c = 2.0
c = a / b; // c = 0.5

Пример 3. Операции над переменными смешанных числовых типов.

Если один из операндов имеет тип с плавающей запятой, а второй операнд имеет целый тип, то результатом будет тип с плавающей запятой.

int i1, i2;
double d1, d2;

i1 = 5;
d1 = 0.5;
d2 = i1 + d1; // d2 = 5.5
d2 = i1 - d1; // d2 = 4.5

// Ошибка: "Cannot implicitly convert type 'double' to 'int'"
// i2 = i1 + d1;
d2 = d1 / i1; // d2 = 0.1 - тип double
d2 = d1 * i1; // d2 = 2.5

 


4. Какие особенности использования оператора вычисления остатка от деления (%)?

Оператор % применяется для вычисления остатка при делении двух чисел. В отличие от языка C/C++ оператор % может быть применен к данным с плавающей запятой.

Пример.

int i;
double d;
i = 7 % 3; // i = 1
i = 8 % 3; // i = 2
i = 9 % 3; // i = 0
d = 7.0 % 3.0; // d = 1
d = 7.0 % 3.5; // d = 0
d = 7.0 % 3.8; // d = 3.2


 


5. Примеры применения операторов инкремента (++) и декремента ().

Оператор инкремента (++) увеличивает значение операнда на 1.

Оператор инкремента i++ или ++i есть аналогичен оператору

i = i + 1;

Оператор декремента () уменьшает значение операнда на 1.

Оператор декремента i или i аналогичен оператору

i = i - 1;

Пример 1.

int a;

a = 5;
a++; // a = 6
a--; // a = 5
++a; // a = 6
--a; // a = 5

Пример 2. Использование операции инкремента и декремента в выражении.

int a, b, c;

a = 5;
b = a++; // b = 5; a = 6

a = 5;
c = ++a; // c = 6; a = 6

a = 5;
b = a--; // b = 5; a = 4

a = 5;
c = --a; // c = 4; a = 4

Пример 3.

int a, b;

a = 5; // a = 5
b = 5; // b = 5
b = b + ++a; // b = 5 + 6 = 11; a = 6

 


6. Какие особенности применения операторов отношения в C#?

Операторы отношения применяются для сравнения значений двух операндов между собой. Результатом работы операторов отношения есть значение истины (true) или лжи (false).

В языке C# введены следующие операторы отношения:

== - равно
!= - не равно
>  - больше
<  - меньше
>= - больше или равно
<= - меньше или равно

Пример.

bool b;
int x, y;

x = 8;
y = 5;
b = x > y;  // b = true
b = x == y; // b = false

 


7. Какие особенности применения логических операторов в языке C#?

Операнды логических операций должны относиться к типу bool.

В языке C# к логическим относятся следующие операции:

&  - логическое "И"
|  - логическое "ИЛИ"
^  - логическое исключающее "ИЛИ"
&& - логическое укороченное "И"
|| - логическое укороченное"ИЛИ"
!  - логическое "НЕТ"

Пример применения логических операций.

bool b;
bool x, y;

x = true;
y = false;

b = x ^ y; // b = true
b = x & y; // b = false
b = x | y; // b = true
b = !x;    // b = false
b = x && y; // b = false
b = x || y; // b = true

 


8. Какие преимущества дает использование сокращенных логических операторов && и ||?

Сокращенные логические операции && и || работают так же как и обычные логические операции & (логическое «И«) и | (логическое «ИЛИ«).

Однако, в случае длинных логических выражений, эти операции разрешают сократить время выполнения и повысить эффективность кода. Это осуществляется за счет того, что после выполнения первого операнда, второй операнд выполняется по мере необходимости.

Например. Рассмотрим логическое «ИЛИ» (оператор ||). Если первый операнд равен true, тогда нет смысла вычислять второй операнд, поскольку все выражение будет равно true.

Так же в логическом «И» (оператор &&). Если первый операнд равен false, тогда все выражение будет равно false. Таким образом, нет необходимости вычислять второй операнд.

За счет этого происходит сокращение времени обработки длинных логических выражений, которые содержат операции «И» и «ИЛИ«.

Пример.

bool b;
bool x, y;

x = true;
y = false;

// Здесь нет смысла вычислять (!y !x || x), поскольку y = false
b = y && (!y !x || x); // b = false

// Здесь нет надобности вычислять (x & !y), поскольку x = true
b = x || (x & !y); // b = true

Обычные логические операции & и || целесообразно использовать в тех случаях, если в программном коде обязательно нужно вычислять правый (второй) операнд.

 


9. Какие особенности применения оператора присваивания в программе?

Простейший оператор присваивания обозначается символом ‘=‘ (равно). Общая форма оператора присваивания:

имя_переменной = выражение;

Оператор присваивания может создавать «цепочку» присваиваний.

Пример.

double x, y, z;
x = y = z = 0.00; // Обнулить значение переменных x, y, z

В вышеприведенном примере значение ‘0.00‘ присваивается сначала переменной z, потом переменной y, потом переменной x.

Оператор присваивания может быть составным.

 


10. Как работают сокращенные (составные) операторы присваивания?

Сокращенные (составные) операторы присваивания позволяют упростить программирование некоторых операций присваивания. Сокращеные операторы дают более эффективный исполнительный код, поскольку левый операнд этих операторов вычисляется только один раз.

В C# существуют следующие сокращенные операторы присваивания для арифметических и логических операций:

+=, -=, *=, /=, %=, &=, |=, =

Примеры применения сокращенных операторов присваивания.

int a = 0, b;
float f = 0f;

a += 10; // a = a + 10, a = 10
f -= 3;  // f = f - 3, f = -3

b = a;   // b = 10
b %= 3;  // b = b % 3, b = 1
f = 5;   // f = 5
f *= 3;  // f = f * 3, f = 15

 


11. Какие особенности применения поразрядных операторов в языке C#?

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

В C# существуют следующие поразрядные логические операции:

&  - поразрядное "И"
|  - поразрядное "ИЛИ"
^  - поразрядное исключающее "ИЛИ"
>> - сдвиг вправо
<< - сдвиг влево
~  - дополнение к 1 (унарный оператор "НЕТ")

Поразрядные операторы с двоичными единицами и нулями работают согласно нижеследующей таблице.

-------------------------------------------
 x     y     x&y     x|y     x^y     ~x
-------------------------------------------
 0     0      0       0       0       1
 0     1      0       1       1       1
 1     0      0       1       1       0
 1     1      1       1       0       0
--------------------------------------------

Пример.

int x, y, z;

x = 0x03;
y = 0xFF;
z = x & y; // z = 0x03
z = x | y; // z = 0xFF

x = 0x01;
y = 0x02;
z = x ^ y; // z = 0x03

byte b;
x = 0x00;
b = (byte)~x; // b = 0xFF

 


12. Какие особенности применения операторов сдвига в C#?

Операторы сдвига могут применяться только к целым типам.

Для выполнения сдвига двоичных разрядов в C# предусмотрено два оператора:

<< - сдвиг влево
>> - сдвиг вправо

Общая форма операторов сдвига:

значение << число_бит
значение >> число_бит

где число_бит – число двоичных разрядов, на которые сдвигается указанное значение.

Пример.

int a, b, c;

a = 5;
b = a >> 2; // b = 5/4 = 1;
c = a << 1; // c = 5*2 = 10

Операция сдвига влево на n разрядов множит число на 2 в степени n. Сдвиг вправо на n разрядов означает деление на 2 в степени n.

 


13. Какие операторы относятся к специальным операторам для особых случаев?

К специальным операторам можно отнести:

 


Связанные темы