- Программирование на C, C# и Java
- Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
- Сложение, вычитание, умножение, деление в C#
- Операторы сложения — + и +=
- Объединение строк
- Объединение делегатов
- Оператор присваивания сложения (+=)
- Возможность перегрузки оператора
- Спецификация языка C#
- См. также
- Сложение на языке программирования
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
Сложение, вычитание, умножение, деление в C#
В данной статье мы познакомимся с основными математическими операциями и их применением в C#.
Для этого мы будем использовать три основных типа данных:
int — целочисленный тип данных. Как понятно из названия, может включать себя только целые числа, например: 0, 10, 123, -5, и так далее, но только в пределах от -2 147 483 648 до 2 147 483 647. так как int является 32-битным типом.
float — тип данных с плавающей запятой. То есть, он принимает десятичные дроби. При этом округляет их максимум до шестого знака после запятой.
double — по сути такой же тип данных, как и float, c той разницей, что float является 32-битным типом, а double 64-битным. Проще говоря, float занимает меньше памяти, но менее точен. Double же потребляет гораздо больше памяти, но зато гораздо точнее: округляет максимум до 14 знаков после запятой.
Переменные будем объявлять не в начале программы, а по ходу её работы. Никакие лишние библиотеки нам не нужны. Пишем прямо в теле программы.
Программа для сложения двух чисел целочисленного типа int будет следующая:
Для начала мы выводим на консоль при помощи метода Console.WriteLine сообщение для пользователя. Пользователь вводит число и, мы записываем его в строку s (string — тип данных, инициализируемый строкой) при помощи метода Console.ReadLine.
C# всегда считывает с консоли строки, он не умеет делить введенные данные самостоятельно на int’ы, float’ы и double’ы. Поэтому мы самостоятельно переводим строку в нужный нам формат. Мы объявляем переменную a типа int и конвертируем в неё полученную от пользователя строку s.
Операторы сложения — + и +=
Операторы + и += поддерживаются встроенными целыми числовыми типами и числовыми типами с плавающей запятой, а также строковым типом и типамиделегатов.
Объединение строк
Если один или оба операнда имеют тип string, оператор + сцепляет строковые представления этих операндов (строковое представление null является пустой строкой):
Console.WriteLine("Forgot" + "white space"); Console.WriteLine("Probably the oldest constant: " + Math.PI); Console.WriteLine(null + "Nothing to add."); // Output: // Forgotwhite space // Probably the oldest constant: 3.14159265358979 // Nothing to add.
Интерполяция строк предоставляет более удобный способ форматирования строк:
Console.WriteLine($"Probably the oldest constant: "); // Output: // Probably the oldest constant: 3.14
Начиная с C# 10, можно использовать интерполяцию строк для инициализации константной строки, если все выражения, используемые для заполнителей, также являются константными строками.
Начиная с C# 11 оператор + выполняет объединение строк для строк литеральных строк UTF-8. Этот оператор объединяет два ReadOnlySpan объекта.
Объединение делегатов
Для операндов того же типа delegate оператор + возвращает новый экземпляр делегата, при вызове которого вызывается сначала левый, а затем правый операнд. Если какой-либо из операндов имеет значение null , оператор + возвращает значение другого операнда (это тоже может быть null ). Следующий пример демонстрирует объединение делегатов с помощью оператора + :
Action a = () => Console.Write("a"); Action b = () => Console.Write("b"); Action ab = a + b; ab(); // output: ab
Для удаления делегатов используйте оператор — .
См. дополнительные сведения о типах делегатов.
Оператор присваивания сложения (+=)
Выражение, использующее оператор += , такое как
за исключением того, что x вычисляется только один раз.
В следующем примере иллюстрируется использование оператора += .
int i = 5; i += 9; Console.WriteLine(i); // Output: 14 string story = "Start. "; story += "End."; Console.WriteLine(story); // Output: Start. End. Action printer = () => Console.Write("a"); printer(); // output: a Console.WriteLine(); printer += () => Console.Write("b"); printer(); // output: ab
Можно также использовать оператор += , который позволяет указать метод обработчика событий при подписке на событие. Дополнительные сведения см. в разделе Практическое руководство. Подписка и отмена подписки на события.
Возможность перегрузки оператора
Определяемый пользователем тип может перегружать оператор + . При перегрузке бинарного оператора + неявно перегружается и соответствующий оператор += . Определяемый пользователем тип не может явно перегружать += оператор.
Спецификация языка C#
См. также
Сложение на языке программирования
Язык программирования Си поддерживает все основные арифметические операции. Эти операции производятся над числами. Значения, которые участвуют в операции, называются операндами. Список имеющихся в Си операций:
- + Операция сложения возвращает сумму двух чисел:
При делении стоит быть внимательным, так как если в операции участвуют два целых числа, то результат деления будет округляться до целого числа, даже если результат присваивается переменной float:
float f = 10 / 4; printf("f = %f \n", f); // 2.0
Результат представлял вещественное число, один из операндов также должен представлять вещественное число:
float f = 10.0 / 4; printf("f = %f \n", f); // 2.5
int a = 35 % 3; // 2 (35 - 33 = 2)
Операции *, /, % имеют больший приоритет, чем + и — :
int a = 8; int b = 7; int c = a + 5 * b; // 43 printf("c = %d \n", c); // 43
Здесь результатом будет число 43:
С помощью скобок мы можем переопределить порядок операций, сделав, чтобы операции с более низким приоритетом выполнялись до операций с более высоким приоритетом:
int a = 8; int b = 7; int c = (a + 5) * b; // 91
Здесь результатом будет число 91:
Также в Си есть специальные унарные операции над одним числом: ++ (инкремент) и — (декремент). Каждая из операций имеет две разновидности: префиксная и постфиксная.
- Префиксный инкремент (++x). Увеличивает значение переменной на единицу и полученное значение используется как значение выражения ++x
int a = 8; int b = ++a; printf("a = %d \n", a); // 9 printf("b = %d", b); // 9
int a = 8; int b = a++; printf("a = %d \n", a); // 9 printf("b = %d", b); // 8
int a = 8; int b = --a; printf("a = %d \n", a); // 7 printf("b = %d", b); // 7
int a = 8; int b = a--; printf("a = %d \n", a); // 7 printf("b = %d", b); // 8
Рассмотрим более сложную ситуацию:
int a = 8; int b = 7; int c = a+++b; printf("a = %d \n", a); // 9 printf("b = %d \n", b); // 7 printf("c = %d \n", c); // 15
Здесь операция трактуются таким образом, что вначале идет постфиксный инкремент, а потом сложение. То есть фактически так:
Аналогично будет расцениваться выражения с постфиксным декрементом: int c = a—b; .