Значение байта без инверсии: 0; двоичная форма: 00000001
Значение байта с инверсией: 255; двоичная форма: 11111110
*/
Операции сдвига.
Пример 2.6. Использование сдвиговых операций.
using System;
Class Demo
{ public static string ByteToStr(byte b)
// Преобразование байта (b) в двоичную форму
{ ... // Код функции смотри в примере 2.5
}
Static void Main()
{ Console.WriteLine("Демонстрация сдвига разрядов " +
"целого числа:");
byte b = 1;
for (int i = 1; i <= 8; i++)
{ Console.WriteLine("Значение байта: {0,3};\t" +
"двоичная форма: {1}", b, ByteToStr(b));
int k = (int) b;
b = (byte)(k << 1);
}
Console.ReadLine();
}
}
/* Вывод:
Демонстрация сдвига разрядов целого числа:
Значение байта: 1; двоичная форма: 00000001
Значение байта: 2; двоичная форма: 00000010
Значение байта: 4; двоичная форма: 00000100
Значение байта: 8; двоичная форма: 00001000
Значение байта: 16; двоичная форма: 00010000
Значение байта: 32; двоичная форма: 00100000
Значение байта: 64; двоичная форма: 01000000
Значение байта: 128; двоичная форма: 10000000
*/
Условная операция ?: имеет три операнда:
<условие> ? <выражение_1> : <выражение_2>;
Например:
int а = 1, b = 4, с;
с = (а > b) ? а : b; // Результат: с = 4
а = (с > 0) ? ++а : ++Ь; // Результат: а = 2
C# допускает использование сокращенных записей операций с присваиванием (составного присваивания):
А += В вместо А = А + В А &= В вместо А = А & В
А -= В вместо А = А - В А |= В вместо А = А | В
А *= В вместо А = А * В А ^= В вместо А = А ^ В
А /= В вместо А = А / В А <<= В вместо А = А << В
А %= В вместо А = А % В А >>= В вместо А = А >> В
Методы класса System.Match
(http://msdn.microsoft.com/ru-ru/library/system.math)
Таблица 2.7. Поля и основные методы класса System.Math
Члены | Описание |
Поля | |
E | Представляет основание натурального логарифма, определяемое константой e = 2.71828182845904523536. |
PI | Представляет отношение длины окружности к ее диаметру, определяемое константой π = 3.14159265358979323846. |
Методы | |
double Abs(double d); | Возвращает модуль аргумента. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Int16, Int32, Int64) |
double Acos(double d); | Возвращает угол в радианах по его арккосинусу |
double Asin(double d); | Возвращает угол в радианах по его арксинусу |
double Atan(double d); | Возвращает угол в радианах по его арктангенсу |
long BigMul(int x, int y); | Возвращает произведение двух 32-разрядных чисел |
double Ceiling(double d); | Возвращает наименьшее целое число, которое больше или равно аргументу. Имеется перегруженный метод для типа Decimal |
double Cos(double d); | Возвращает косинус угла d в радианах |
double Cosh(double d); | Возвращает гиперболический косинус угла d в радианах |
int DivRen (int a, int b, out int R); | Возвращает результат деления двух целых чисел и остаток R как выходной параметр. Имеется перегруженный метод для типа Int64 |
double Exp(double d); | Возвращает Е в степени d |
double Floor(double d); | Возвращает наибольшее целое, которое меньше или равно заданному числу. Имеется перегруженный метод для типа Decimal |
double IEEERemainder (double a, double b); | Возвращает остаток от деления а на b |
double Log(double d); | Возвращает натуральный логарифм числа d. В перегруженном методе вторым параметром передается основание логарифма |
double Log10(double d); | Возвращает десятичный логарифм числа d |
double Max (double a, double b)); | Возвращает максимальное из двух чисел. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64) |
double Min (double a, double b); | Возвращает меньшее из двух чисел. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64) |
double Pow (double a, double b); | Возвращает результат возведения числа а в степень b |
double Round(double a); double Round (double a, Int32 n); | Округляет число а до ближайшего целого (или до n разрядов). Имеется перегруженный метод для типа Decimal |
int Sign(double a); | Возвращает -1, 0 или +1, когда число а, соответственно, меньше нуля, равно ему или больше нуля. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Int16, Int32, Int64) |
double Sin(double a); | Возвращает синус угла а в радианах |
double Sinh(double a); | Возвращает гиперболический синус угла а в радианах |
double Sqrt(double a); | Возвращает корень квадратный из а |
double Tan(double a); | Возвращает тангенс угла а в радианах |
double Tanh(double a); | Возвращает гиперболический тангенс угла а в радианах |
double Truncate(double a) | Возвращает целую часть заданного числа a. Имеется перегруженный метод для типа Decimal |
Пример 2.7. Использование методов класса System.Math для определения высоты, площади и углов трапеции по ее известным сторонам.
Дано: Трапеция ABCD; основания: a = 20 см, c = 10 см, бок. стороны: b = 8 см, d = 6 см. Найти: h, S, α, β. |
Формулы: (ф-ла Герона);
=> ;
;
sin α = h / b ; Ðαрад = arcsin α ; Ðαград = αрад · 180 / π ;
sin β = h / d ; Ð βрад = arcsin β ; Ð βград = βрад · 180 / π .
using System;
Class MathTrapezoid
{ static void Main()
{ double a = 20.0; // Большее основание
double c = 10.0; // Меньшее основание
double b = 8.0; // Левая сторона
double d = 6.0; // Правая сторона
Console.WriteLine("Основания трапеции равны 20 и 10 см, " +
"боковые стороны - 8 и 6");
// Вычисление высоты трапеции
double p = (a - c + b + d) / 2.0;
double S_ABD = Math.Sqrt(p * (p - a + c) * (p - b) * (p - d));
double h = 2.0 * S_ABD / (a - c);
Console.WriteLine("Высота трапеции: " + h.ToString());
// Вычисление площади трапеции
double S_ABCD = (a - c) * h / 2.0;
Console.WriteLine("Площадь трапеции: " + S_ABCD.ToString());
// Вычисление левого нижнего угла трапеции (в радианах)
double sinA = h / b;
double AlphaRad = Math.Round(Math.Asin(sinA), 2);
Console.WriteLine("Левый нижний угол: " + AlphaRad.ToString() +
" (радиан)");
// Вычисление правого нижнего угла трапеции (в радианах)
double sinB = h / d;
double BetaRad = Math.Round(Math.Asin(sinB), 2);
Console.WriteLine("Правый нижний угол: " + BetaRad.ToString() +
" (радиан)");
// Вычисление левого нижнего угла трапеции (в градусах)
double AD = AlphaRad * 180 / Math.PI;
double AlphaDegree = Math.Round(AD, 2);
Console.WriteLine("Левый нижний угол: " +
AlphaDegree.ToString () + " (градусов)");
// Вычисление правого нижнего угла трапеции (в градусах)
double BD = BetaRad * 180 / Math.PI;
double BetaDegree = Math.Round(BD, 2);
Console.WriteLine("Правый нижний угол: " +
BetaDegree.ToString() + " (градусов)");
Console.ReadLine();
}
}
/* Вывод: