
- •Алфавит с# включает:
- •Вопрос№3
- •Вопрос №4
- •Типы данных:
- •Правила преобразования типов
- •Вопрос№5
- •7) Строковые преобразования. Класс Convert:
- •Приоритеты операций:
- •Операции присваивания
- •Вопрос№7
- •Вопрос№8
- •Вопрос№9
- •Вопрос№10
- •Вопрос№11
- •Вопрос№12
- •Вопрос№13
- •Вопрос№16
- •Вопрос№17
- •Вопрос№18
- •Вопрос№20
- •Вопрос№21
- •Вопрос№22
- •Вопрос№23
- •Для действительных чисел:
- •Определение числа элементов массива, удовлетворяющих заданному условию
- •Вопрос№25
- •Вопрос№26
- •Одномерная
Правила преобразования типов
Автоматическое преобразование. Происходит, когда два типа совместимы. Автоматическое (неявное) преобразование возможно не всегда, а только если при этом не может случиться потеря значимости.
Если один из операндов имеет тип, изображенный на более низком уровне , чем другой, то он приводится к типу второго операнда при наличии пути между ними. Если пути нет, возникает ошибка компиляции. Если путей несколько, выбирается наиболее короткий, не содержащий пунктирных линий. Если путей несколько то выбирается наиболее короткий не содержащий пунктирных линий.
Арифметические операции не определены для более коротких, чем int, типов.Это означает, что если в выражении участвуют только величины типов sbyte, byte, short и ushort, перед выполнением операции они будут преобразованы в int. Таким образом, результат любой арифметической операции имеет тип не менее int.
Вопрос№5
Операция присваивания
Операция, обозначаемая знаком =, называется операцией присваивания. Данная операция является бинарной, имеет два операнда. Например, X=Y. Операнд слева от знака может быть только переменной, объектом. Операнд справа может быть выражением, т.е. записью в которой используются знаки других операций. Как правило, операция = является главной операцией, образующей оператор присваивания.Имеется интересная особенность этой операции. Она допускает цепочку присваиваний. Например, X=Y=Z=10;
2) Арифметические операции
Различают 5 операций, выполняющих арифметические действия над числами.
Выполнение первых трёх операций очевидно и не требует пояснения. А вот операция деления зависит от типа данных. Если тип данных, участвующих в операции, вещественный, то результат получится по правилам деления с целой и дробной частью. Если тип целый, то результатом деления также является целое число.
Деление по модулю возможно только для целых чисел. Оно обеспечивает получение остатка от деления двух целых чисел. Например, в результате операции 15 % 4 получится число 3. Таким образом, пара операций / и % обеспечивает для целых чисел специфическую возможность: можно получить и целую часть, и остаток от деления.
Арифметические операции можно объединять вместе с операцией присваивания, записывая две операции в виде одной. Это так называемая сокращённая форма записи.
Например: обычная запись: a = a + Stoim; сокращённая форма: a+=Stoim;
К арифметическим операциям относятся две специфические операции – инкремент и декремент. Эти операции позволяют изменять значения переменных на 1. Инкремент – увеличивает, обозначается знаком ++. Декремент – уменьшает, обозначается знаком --. По сути дела, эти операции являются сокращённой формой записи для выражений типа i = i +1 и i = i – 1. Например, вместо a = a + 1; можно записать: a++; (постфиксный вариант) или ++a; (префиксный вариант). Аналогично: --Prim; Prim--;
Между двумя последними формами нет никакой разницы, если эти операции являются единственными в записи выражения, т.е. используются самостоятельно. Если же речь идёт об использовании в сложном выражении, то приходится учитывать, когда на самом деле выполняются эти операции. Суть в том, что при постфиксном варианте записи значение переменной сначала используется, а потом изменяется на 1. При префиксном, наоборот, сначала изменяется, а потом используется.
Например: t = 5; // t = 5 n = 4 * t++; // n = 20, t = 6 k = ++n / 3; // n = 21, k = 7 b = --k / t; // k = 6, b = 1
3) Поразрядные операции
В C# имеются операции, пригодные для обработки отдельных разрядов памяти (например, в видеопамяти графического дисплея). Такие операции называются поразрядными (операции с битами). Они позволяют изменять, считывать и сдвигать разряды в переменных. При этом переменная рассматривается не как число, а как комбинация двоичных разрядов, т.е. как логический код. Операция выполняется отдельно над каждым разрядом. Перечень поразрядных операций приведён в следующей таблице.
Существует краткая форма поразрядных операций присваивания. Например:
x &= y вместо x = x & y
Поразрядные операции можно использовать только с целочисленными типами данных, к вещественным числам их применять нельзя!!!
Пример 1: int k = 26; k & 15 // 10 k | 15 // 31 k ^ 15; // 21 k << 2 // 104 k >> 2 // 6
Пример 2: Выделить пятый бит в байте B, а остальные обнулить. В = (B & 4);
4) Операции отношения:
Все операции отношения используются для сравнения значений переменных или выражений. Эти операции вырабатывают значение булевского типа: ИСТИНА (true) или ЛОЖЬ (false). Численных эквивалентов для этих значений в языке C# не существует. Перечень операций приведён в таблице:
При выполнении операций сравнения следует помнить одну специфическую особенность. Точное сравнение вещественных чисел возможно только с нулём!
Сравнение ненулевых вещественных чисел, полученных путём вычислений, возможно только с определённой точностью. Это связано с формой представления вещественных чисел (формат с плавающей запятой). А вот числа формата Decimal можно сравнивать между собой на равно.
5) Логические операции:
Логические операции используются для составления логических выражений на основе выражений, которые используют операции сравнения. Такие выражения называются булевыми. Значением булевого выражения также может быть ИСТИНА и ЛОЖЬ.
6) Операция «приведение к типу»:
Эта операция используется тогда, когда необходимо преобразовать значение одного типа в значение другого типа. Это так называемое явное преобразование типов. Операция задаётся указанием имени типа в круглых скобках. Например, (byte) – преобразовать в тип байт. Рассмотрим пример:
int n = 10; double z; z = n; n = (int) z;
В данном примере объявлены две переменные, причём целочисленной уже присвоено значение. После присваивания значением z будет число 10,0 – такое преобразование выполнится неявно автоматически, и несогласования типов не будет. А вот обратное преобразование надо задавать явно. Понять, когда возможно неявное преобразование, а когда приведение надо делать явно, можно на основании схемы. На схеме перечислены все арифметические типы. Стрелками указаны направления, по которым автоматически осуществляется неявное преобразование (например, из byte в double). Любое обратное приведение (против стрелок) должно быть явным!!! Но надо помнить: ответственность за такое преобразование лежит на программисте. Вполне может оказаться, что при таком преобразовании будут искажены данные или потеряна точность, и система об этом не сообщит.