Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки? Спасибо! |
Основные конструкции языков Java и C#
Базовые типы и операции над ними
В обоих рассматриваемых языках имеются ссылочные типы и типы значений. Объекты ссылочных типов имеют собственную идентичность, на такой объект можно иметь ссылку из другого объекта, они передаются по ссылке, если являются аргументами или результатами методов. Объекты типов значений представляют собой значения, не имеющие собственной идентичности, — все равные между собой значения неотличимы друг от друга, никак нельзя сослаться только на одно из них.
В обоих языках есть примитивные типы, являющиеся типами значений, для представления простых данных: логических, числовых и символьных.
Логический тип
В Java он назван boolean, а его обертка — java.lang.Boolean.
В C# он назван bool, а его обертка — System.Boolean.
Значения этого типа — логические значения, их всего два — true и false. Нет никаких неявных преобразований между логическими и целочисленными значениями. Над значениями этого типа определены следующие операции:
- == и != — сравнения на равенство и неравенство.
- ! — отрицание.
- && и || — условные (короткие) конъюнкция и дизъюнкция (‘и’ и ‘или’). Второй аргумент этих операций не вычисляется, если по значению первого уже ясно, чему равно значение выражения, т.е. в случае конъюнкции — если первый аргумент равен false, а в случае дизъюнкции — если первый аргумент равен true. С помощью условного оператора ?: их можно записать так: (x && y) — ((x)?(y): false), (x || y) — ((x)? true :(y)). Напомним, что означает условный оператор — выражение a?x:y вычисляет значение a, если оно true, то вычисляется и возвращается значение x, иначе вычисляется и возвращается значение y.
- & и | — (длинные) конъюнкция и дизъюнкция (‘и’ и ‘или’). У этих операций оба аргумента вычисляются всегда.
- ^ — исключающее ‘или’ или сумма по модулю 2.
- Для операций &, |, ^ имеются соответствующие операторы присваивания &=, |=, ^=. Выражение x op= y, где op — одна из операций &, |, ^, имеет тот же эффект, что и выражение x = ((x) op (y)), за исключением того, что значение x вычисляется ровно один раз.
Целочисленные типы
В обоих языках имеются следующие целочисленные типы:
- Тип байтовых целых чисел, называемый в Java byte, а в C# — sbyte. Его значения лежат между –27 и (27–1) (т.е. между –128 и 127)
- short, чьи значения лежат в интервале -215 – (215-1) (-32768 – 32767)
- int, чьи значения лежат в интервале -231 – (231-1) (-2147483648 – 2147483647)
- long, чьи значения лежат в интервале -263 – (263-1) (-9223372036854775808 – 9223372036854775807)
Над значениями целочисленных типов определены следующие операции:
- ==, != — сравнение на равенство и неравенство.
- <, <=, >, >= — сравнение на основе порядка.
- +, -, *, /, % — сложение, вычитание, умножение, целочисленное деление, взятие остатка по модулю.
-
++, -- — увеличение и уменьшение на единицу. Если такой оператор написан до операнда, то значение всего выражения совпадает с измененным значением операнда, если после — то с неизмененным.
В результате выполнения последовательности действий
x = 1; y = ++x; z = x++;
значение x станет равно 3, а значения y и z — 2.
- ~, &, |, ^ — побитовые операции дополнения, конъюнкции, дизъюнкции и исключающего ‘или’.
-
<<, >> — операторы, сдвигающие биты своего первого операнда влево и вправо на число позиций, равное второму операнду.
- Для операций +, -, *, /, %, ~, &, |, ^, <<, >> (и Java -специфичной операции >>> ) имеются соответствующие операции присваивания. При этом выражение x op= y, где op — одна из этих операций, эквивалентно выражению x = (T)((x) op (y)), где T — тип x, за исключением того, что значение x вычисляется ровно один раз.
Любые целочисленные типы можно явно приводить друг к другу, а неявные преобразования переводят из меньших типов в большие, если при этом нет перехода от типа со знаком к беззнаковому (обратный переход возможен).
В обоих языках целочисленным типом считается и тип char, чьими значениями являются 16-битные символы (от '\u0000' до '\uffff' ). Для него определен тот же набор операций, но преобразования между ним и другими типами по умолчанию не производятся (явные преобразования возможны).