В языке C# имеются обычные для всех языков арифметические операции - "+, -, *, /, %". Все они перегружены. Операции "+" и "-" могут быть унарными и бинарными. Унарные операции приписывания знака арифметическому выражению имеют наивысший приоритет среди арифметических операций. К следующему приоритету относятся арифметические операции типа умножения, к которому относятся три операции - умножения, деления и взятия остатка. Все эти операции перегружены и определены для разных подтипов арифметического типа. Следует, однако, помнить, что арифметические операции не определены над короткими числами (byte, short) и начинаются с типа int.
Операция деления "/" над целыми типами осуществляет деление нацело, для типов с плавающей и фиксированной точкой - обычное деление. Операция "%" возвращает остаток от деления нацело и определена не только над целыми типами, но и над типами с плавающей точкой. Тип результата зависит от типов операндов. Приведу пример вычислений с различными арифметическими типами:
/// <summary>/// Арифметические операции/// </summary>public void Ariphmetica(){ byte b1 = 7, b2 = 3, b3; b3 = (byte)(b1 / b2); int n = -7, m = 3, p, q, r; p = n / m; q = n % m; r = p*m + q; Console.WriteLine("Операции над типом int"); Console.WriteLine( "n = {0}, m = {1}, p = n/m = {2}, " + "q = n % m = {3}, r = p*m + q = {4}", n, m, p, q, r); Console.WriteLine("Операции над типом double"); double x = 7.5, y = 3.5, u, v, w; u = x / y; v = u * y; w = x % y; Console.WriteLine( "x = {0}, y = {1}, u = x/y = {2}, " + "v = u*y = {3}, w = x % y = {4}", x, y, u, v, w); Console.WriteLine("Операции над типом decimal"); decimal d1 = 7.5M, d2 = 3.5M, d3, d4, d5; d3 = d1 / d2; d4 = d3 * d2; d5 = d1 % d2; Console.WriteLine( "d1 = {0}, d2 = {1}, d3 = d1/d2 = {2}, " + "d4 = d3*d2 = {3}, d5 = d1 % d2 = {4}", d1, d2, d3, d4, d5);}//Ariphmetica
Результаты вычислений при вызове этого метода показаны на рис. 3.3.
увеличить изображение Рис. 3.3. Результаты работы метода Ariphmetica
Для целых типов можно исходить из того, что равенство истинно. Для типов с плавающей точкой выполнение точного равенства следует считать скорее случайным, а не закономерным событием. Законно невыполнение этого равенства, как это происходит при вычислениях с фиксированной точкой.
Как уже говорилось, при записи выражения от программиста требуется знание всех операций, которые могут применяться в построении выражений, знание их точной семантики, понимание тех преобразований операндов, которые могут осуществляться при выполнении операций. Но есть и другие не менее важные цели, которые следует ставить на этом этапе.