Сложение и вычитание

Операция сложения (+) возвращает сумму двух операндов. Стандартная опе­рация сложения определена для типов int, uint, long, ulong, float, double и decimal. К величинам других типов ее можно применять, если для них существует неяв­ное преобразование к этим типам (см. рис. 3.1). Тип результата операции равен «наибольшему» из типов операндов, но не менее int.

Если оба операнда целочисленные или типа decimal и результат операции слиш­ком велик для представления с помощью заданного типа, генерируется исключе­ние System.OverflowException1.

В проверяемом контексте. В непроверяемом исключение не выбрасывается, зато отбра­сываются избыточные биты.

Операция вычитания (-) возвращает разность двух операндов. Стандартная опера­ция вычитания определена для типов int, uint, long, ulong, float, double и decimal. К величинам других типов ее можно применять, если для них существует неяв­ное преобразование к этим типам (см. рис. 3.1). Тип результата операции равен «наибольшему» из типов операндов, но не менее int.

Если оба операнда целочисленные или типа decimal и результат операции слиш­ком велик для представления с помощью заданного типа, генерируется исключе­ние System.OverflowException.

Операции сдвига

Операции сдвига («и») применяются к целочисленным операндам. Они сдви­гают двоичное представление первого операнда влево или вправо на количество двоичных разрядов, заданное вторым операндом.

Фактически, учитывается только 5 младших битов второго операнда, если первый имеет тип int или uint, и 6 битов, если первый операнд имеет тип long или ulong.

При сдвиге влево (<<) освободившиеся разряды обнуляются. При сдвиге вправо (>>) освободившиеся биты заполняются нулями, если первый операнд беззнакового типа (то есть выполняется логический сдвиг), и знаковым разрядом — в против­ном случае (выполняется арифметический сдвиг). Операции сдвига никогда не приводят к переполнению и потере значимости. Стандартные операции сдвига определены для типов int, uint, long и ulong. Пример применения операций сдвига представлен в листинге 3.5.

Листинг 3.5. Операции сдвига

using System;

namespace ConsoleApplicationl

{

class Class1

{

static void Main()

{

byte a = 3, b = 9;

sbyte с = 9, d = -9;

Console.WriteLine(a << 1); // Результат 6

Console.WriteLine(a << 2); // Результат 12

Console.WriteLine(b >> 1); // Результат 4

Console.WriteLine(с >> 1); // Результат 4

Console.WriteLine(d >> 1); // Результат -5

}

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: