Какого типа будет результат операции 4 2
Определяющие черты новгородской архитектуры:
Укажите правильный вариант ответа:
Простота и скромность
Монументальность и многообразие декоративных элементов
Широкое использование западноевропейских форм и традиций
Торжественность и пышность
4. Put the words in the correct order to make sentences. 1. always/ shopping/ we/on /Tuesdays/go __________________________________________________ 2. usually/to/goes/the/in/park/evening/the/she _____________________________________________________ 3. never / Mark/paints/the/morning/in/ _____________________________________________________ 4. usually/I/breakfast/have/half/six/past/at _____________________________________________________ 5. we/visit/often/our/on /Sundays/granny ___________________________________________________
Бинарные операторы в Java

Оператор принимает на вход аргументы и возвращает некоторые значения. Выделяют унарные, бинарные и тернарные операторы. Например, !false — унарный, a + b — бинарный, а? : — является единственным оператором, принимающим на вход три аргумента.
Первое, что необходимо помнить, это приоритет выполнения операторов:
- Пост-унарные операторы: exception++ и exception—
- Пре-унарные операторы: ++exception и —exception
- Остальные унарные операторы: +, -, !
- Умножение, деление, взятие остатка: *, /, %
- Сложение и вычитание: +, —
- Операторы битового сдвига: <<, >>, >>>
- Операторы сравнения: <, >, <=, >=, instanceof
- Операторы равенства-неравенства: ==, !=
- Логические операторы: &, |, ^
- Short-circuit логические операторы: &&, ||
- Тернарный оператор: boolean expression? expression1: expres-
sion2 - Операторы присваивания: =, +=, -=, *=, /=, %=, &=, ^=, !=, <<=, >>=, >>>=
Работа с бинарными арифметическими операторами
Начнем с бинарных операторов, они наиболее часто встречаются в Java. На экзамене могут предлагать достаточно сложные выражения для вычисления которых необходимо помнить порядок их выполнения.
Арифметические операторы
К арифметическим операторам относятся операторы сложения, вычитания, умножения и взятия остатка. Как я уже сказал, при вычислении необходимо помнить приоритет операторов:
int x = 2 * 5 + 3 * 4 — 8 = 10 + 12 — 8 = 14;
Также надо помнить, что приоритет выполнения может изменяться скобками (вначале вычисляется выражение в скобках):
int x = 2 * ((5 + 3) * 4 – 8) = 2 * (8 * 4 – 8) = 2 * (32 – 8) = 2 * 24 = 48;
Новички могут путать операторы целочисленного деления (/) и взятия модуля (%):
Преобразование чисел
Если аргументы бинарного оператора числовые и разные, Java применяет преобразования типов по следующим правилам:
- Если два аргумента относятся к разным типам данных, то Java преобразует аргумент менее вместительного типа к аргументу более вместительного типа
- Если один аргумент относится к целочисленному типу, а другой к вещественному, то Java преобразует значение целочисленного типа к вещественному типу
- Независимо от типов аргументов, Java вначале преобразует менее вместительные целочисленные типы (byte, short, char) к типу int
- После приведения аргументов к одному типу, Java вернет результат того же типа, которым обладают аргументы после приведения
Какого типа будет результат выполнения умножения x * y?
Согласно первому правилу, x будет преобразован к типу long, а затем будет возвращен результат того же типа.
Какого типа будет результат выполнения сложения x + y?
Здесь в лучших традициях сертификации нас подстерегает ловушка: 2.1 — это double, а 2.1f — это float. Попытка записать значение типа double в переменную типа float без явного преобразования приводит к ошибке компиляции в Java.
Какого типа будет результат выполнения сложения x + y?
По аналогии с примером 1, float будет преобразован к double, а затем будет возвращен результат типа double.
Какого типа будет результат выполнения деления x / y?
Согласно правилу 3 оба аргумента перед выполнением деления будут приведены к int, а потом по правилу 4 будет возвращен int. Ответ вовсе не short!
Какого типа будет результат выполнения операции x * y / z?
Согласно всем правилам выше вначале x будет преобразован к int’у. Затем выполняется операция умножения x (int) и y (float): x будет преобразован ко float, и результат будет принадлежать типу float. Потом выполняется float / double, поэтому float будет преобразован к double, и будет возвращен double.
Интересно развиваться в данном направлении? Посмотрите программу курса «Подготовка к сертификации Oracle Java Programmer (OCAJP)»!
Какого типа будет результат операции 4 2

var i, y: integer;
begin
y := 0;
for i := 1 to 4 do
begin
y := y * 10;
y :=y + i;
end
end.
var y : real; i : integer;
begin
y := 0;
i := 5;
while i>2 do
begin
i:=i − 1;
y := y + i * i
end;
end.
var y : real; i : integer;
begin
y := 0;
i := 1;
repeat
i :=2*i;
y := y + i
until i > 5;
end.
for i:=0 to 10 do
A[i]:= i + 1;
for i:=0 to 10 do
A[i]:= A[10-i];
1) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
2) 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
3) 11, 10, 9, 8, 7, 6, 7, 8, 9, 10, 11
4) 10, 9, 8, 7, 6, 5, 6, 7, 8, 9, 10
for i:=1 tо 3 do
if A[i] > A[i+3] then
begin
c :=A[i];
A[i] :=A[i+3];
A[i+3] := c;
end;
1) 6, 3, 7, 35, 24, 13
2) 13, 6, 35, 3, 24, 7
3) 3, 7, 13, 24, 6, 35
4) 35, 3, 13, 24, 6, 7
n := 10;
for i := 1 to n do begin
A[n+1-i] := 2*A[i];
end;
for i:=0 to 10 do
A[i]:=i-1;
for i:=1 to 10 do
A[i-1]:=A[i];
A[10]:=10;
1) 27
2) 9
3) 105
4) 315
procedure F(n: integer);
begin
writeln(‘*’);
if n > 0 then begin
F(n-3);
F(n div 2);
end
end;
procedure F(n: integer);
begin
writeln(n);
if n < 5 then begin
F(n+3);
F(n*3)
end
end;
function F(n: integer): integer;
begin
if n > 2 then
F := F(n-1)+F(n-2)+F(n-3)
else
F := n;
end;
4.5. Преобразование типов операндов арифметических операций
Если операнды арифметических операндов имеют один тип, то и результат операции будет иметь такой же тип.
Но, как правило, в операциях участвуют операнды различных типов. В этом случае они преобразуются к общему типу в порядке увеличения их «размера памяти», т.е. объема памяти, необходимого для хранения их значений. Поэтому неявные преобразования всегда идут от «меньших» объектов к «большим». Схема выполнения преобразований операндов арифметических операций выглядит следующим образом:
short, char
unsigned
double
float
double
Стрелки отмечают преобразования даже однотипных операндов перед выполнением операции. То есть действуют следующие правила:
– значения типов charиshortвсегда преобразуются вint;
– если один из операндов имеет тип double, то и другой преобразуется вdouble;
– если один из операндов long, то другой преобразуется вlong.
Внимание. Результатом операции1/3будет значение0, чтобы избежать такого рода ошибок, необходимо явно изменить тип хотя бы одного операнда, т.е. записать, например: 1./3 .
Типы charиintмогут свободно смешиваться в арифметических выражениях. Каждая переменная типаcharавтоматически преобразуется вint, что обеспечивает значительную гибкость при проведении преобразований, т.к. над типомintдействия выполняются быстрее, чем над любым другим типом.
При выполнении операции присваивания значение правого операнда преобразуется к типу левого, который и является типом полученного результата. И здесь необходимо быть внимательным, т.к. при некорректном использовании операций присваивания могут возникнуть неконтролируемые ошибки. Так, при преобразовании intвcharстарший байт просто отбрасывается.
Пусть: float x;int i; тогда иx=i; иi =x; приводят к преобразованиям, причемfloatпреобразуется вintотбрасыванием дробной части.
Тип doubleпреобразуется вfloatокруглением.
Длинное целое преобразуется в более короткое целое и charпосредством отбрасывания бит в старших разрядах.
Итак, безопасным преобразованием типов является преобразование в порядке увеличения «размера памяти», обратное преобразование может привести к потере значащих разрядов.
4.6. Операция приведения типа
В любом выражении преобразование типов может быть осуществлено явно, для этого достаточно перед выражением поставить в круглых скобках атрибут соответствующего типа:
(тип) выражение;
ее результат – значение выражения, преобразованное к заданномутипу.
Операция приведения типа вынуждает компилятор выполнить указанное преобразование, но ответственность за последствия возлагается на программиста. Использовать эту операцию рекомендуется везде, где это необходимо, например:
double x;
int n= 6,k= 4;
x= (n+k)/3;x= 3, т.к. дробная часть будет отброшена;
x= (double)(n+k)/3;x= 3.333333 – использование операции приведения типа позволило избежать округления результата деления целочисленных операндов.
4.7. Операции сравнения
В языке Си используются следующие операции сравнения, т.е. отношения между объектами:
==– равно или эквивалентно;!=– не равно;
<– меньше;<=– меньше либо равно;
>– больше;>=– больше либо равно.
Пары символов соответствующих операций разделять нельзя.
Общий вид операций отношений:
Операнд_1 Знак операции Операнд_2
Указанные операции выполняют сравнение значений первого операнда со вторым. Операндами могут быть любые арифметические выражения и указатели.
Значения арифметических выражений перед сравнением вычисляются и преобразуются к одному типу.
Арифметические операнды преобразуются по правилам, аналогичным для арифметических операций. Операнды-указатели преобразуются в целые числа необходимого типа. Результат сравнения указателей будет корректным в арифметическом смысле лишь для объектов одного массива.
В языке Си нет логического типа данных. Результат операции отношения имеет значение 1, если отношение истинно, или в результате вычислений получено не нулевое значение, воспринимаемое компилятором Си как истина(true), или0– в противном случае, т.е. – ложно(false). Следовательно, операция отношения может использоваться в любых арифметических выражениях.
Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции отношений.
Примеры использования операций отношений:
y> 0 ,x==y,x!= 2 .
Отношения между объектами сложных типов проверяются либо посредством последовательного сравнения их элементов (для массивов), либо используя стандартные библиотечные функции, которые будут рассмотрены позже.