Перед выполнением операции все операнды целого типа со знаком, которые по длине короче, чем int преобразуются в int, а беззнаковые операнды короче uint, преобразуются вuint.
Перед выполнением операции операнд младшего типапреобразуется к операнду старшего типа. Старшим считается тип, у которого больше диапазон значений.
![]() |
Больше Меньше
Исключение
Особая ситуация: операнды типов uint и int. Эти типы имеют одинаковый по величине диапазон значений, но смещенный на числовой оси. В этом случае оба операнда преобразуются к типу long.
Тип результата операции будет совпадает с типом операндов после преобразования.
Преобразования выполняются при выполнении операции и не влияют на хранение значений операндов в памяти.
Арифметические операции
Унарные
Изменение знака
Унарный +
Инкремент
Декремент
Изменение знака
int a=10, b=20, c, d;
c =- a; // с=-10
d =+ b; // d=20
Инкремент предназначен для увеличения значения переменной на единицу, а декремент – для уменьшения значения переменной на единицу.
inta =10;
|
++а; // а=а+1; а=11
inta =10;
|
--а; // а=а-1; а=9
Операции инкремент и декремента могут использоваться как в префиксной форме (знак перед переменной), так и в постфиксной форме (знак после переменной). Отличия будут проявляться при использовании операции в выражении: префиксная – сначала изменяется значение переменной, потом используется новое значение; постфиксная – сначала используется старое значение переменной, потом изменяется значение переменной.
int a=10, b=10, x, y;
x=a++; //. a=11 →x=10
y =++ b; // b=11 → y=11
Бинарныеоперации
![]() |
уменьшение
приоритета
inta, b;
double c;
a=10/4; //a=2
c=10/4.; //c=2.5
b=10./4; //ошибка!!! (10./4.=2.5)
при присваивании возможна
потеря информации!!!
inta;
а=10%3; //а=1
а=-10%3; //а=-1
а=10%-3; //а=1
а=-10%-3; //а=-1
Операция явного преобразования типа
(Тип приемника) операнд
преобразование к типу приемника
inta;
double b;
a=(int)3.5; //a=3
b =(int)3.5+5.5; //b=3+5.5=8.5
Операция явного преобразования типа
![]() |
boola, b, c;
a= 10>5; // true
b= ’B’>’A’; // true
c= 65==’A’; // true
Логические операции
![]() |
boola;
a =!(10>5&& 3==8); //true
Операции сдвига
![]() |
Для знаковых типов – арифметический сдвиг, для беззнаковых – логический.
ushort a=0x8005, b;
b=(ushort)(a>>1);
0 1000 0000 0000 010 1
short a=-0x1005, b;
b=(short)(a>>1);
1 1110 1111 1111 110 1
![]() |
пишем знак числа на освободившееся место
Битовые операции
![]() |
bytea=0x1F, b=0x3A, d;
d =(byte)(~(a ^ b));
Операции выполняются поразрядно:
0001 1111
0011 1010
0010 0101 a ^ b
1101 1010 ~(a ^ b)
Тернарная операция
Предназначена для реализации простейшего варианта ветвления.
Операнд1? Операнд2:Операнд3
Выполнение операции иллюстрируется приведенной ниже схемой, а применение операции для вычисления минимального из трех целых чисел – фрагментом программы.
:
int a, b, c, min;
…
a=10; b=5; c=8;
min = a;
min = b < min? b:mn;
min = c < min? c:mn;