Если вы новичок в этой серии, начните с здесь.
Предыдущее сообщение, Часть 5, находится здесь
Теперь давайте продолжим наше путешествие, разобравшись, что такое операторы, и используя их в нашем коде Kotlin.
Операторы — это специальные символы, предназначенные для выполнения специальных вычислений, сравнений и логических операций. А переменные, над которыми выполняются эти операции, называются Операнды. Например, в x + y; x и y — операнды, а + (плюс) — оператор.
Это типы операторов, доступных в Kotlin-
- Арифметические операторы
- Операторы присваивания
- Операторы сравнения/сравнения
- Логические операторы
- Унарные операторы
- Побитовые операторы
Арифметические операторы
Эти операторы способны выполнять основные операции.
- плюс (+) → Добавление
- дефис (-) → Вычитание
- звездочка (*) → Умножение
- косая черта (/) → Раздел
- процент (%) → Модуль (получение остатка после деления)
Для Action-Jackson см. рисунок ниже.
Вот код-
fun main(){ val x = 9; val y = 2 println(x + y) println(x - y) println(x * y) println(x / y) print(x % y) }
Начиная со строки 2, я создал две переменные x и yв одной строке с помощью символа разделения { точка с запятой (;)}. Затем я напечатал все возможные операции с арифметическими операторами. Вы также можете попробовать смешать эти операторы в выражениях. Затем Kotlin будет выполняться в соответствии с Правилом BODMAS (Скобка деления, умножения, сложения, вычитания). Всякий раз, когда вы хотите изменить порядок выполнения, просто поместите выражение, которое вы хотите вычислить первым, в круглые скобки.
Операторы присваивания
Эти операторы позволяют нам присваивать значения нашим переменным.
- равно (=)
- плюс равно (+=)
- минус равно (-=)
- умножить равно (*=)
- разделить равно (/=)
- остаток равен (%=)
Пример: x += 3 равно x = x+ 3 (означает, что 3 добавляется к предыдущему значению x и сохраняется как новое значение x после выполнения).
fun main(){ var x = 2 println(x) x += 3 println(x) x -= 3 println(x) x *= 3 println(x) x /= 3 println(x) x %= 3 print(x) }
Вывод приведенного выше кода:
Объяснять не надо, вы сами это понимаете. Если нет, прокомментируйте ниже.
Реляционные операторы или операторы сравнения
Эти операторы полезны, когда мы сравниваем два значения. Просто подумайте в целом, если вы спросите, вес моего тела больше, чем у моего друга? Тогда вы получите ответ «Да» или «Нет». Точно так же результат, который вы получите после сравнения двух значений, будет либо true, либо false.
- == → равно (произносится как равное равное)
- != → не равно (произносится как не равно)
- › → больше, чем
- ‹ → меньше чем
- ›= → больше или равно (произносится как больше равно)
- ‹= → меньше или равно (произносится как меньшее равное)
fun main(){ val x = 4 val y = 5 println(x == y) println(x != y) println(x > y) println(x < y) println(x >= y) print(x <= y) }
Вывод приведенного выше кода:
Опять же, не нужно пояснений, вы сами это понимаете. Если нет, прокомментируйте ниже.
Логические операторы
Если вы когда-либо изучали таблицу истинности в математике или логические элементы в цифровых схемах, криптографии или где-либо еще, вы должны были знать некоторые логические операции. Эти операции помогают нам выполнять логику между двумя переменными или значениями.
- && → логическое И
- || → логическое ИЛИ
- ! → логическое НЕ
Пример 1
fun main(){ val x = 2 val y = 5 val bool1 = (x < y) && (x > 1) val bool2 = (x < y) && (x > 2) val bool3 = (x > y) || (x > 1) val bool4 = (x > y) || (x < 2) val bool5 = !(x > y) val bool6 = !(x < y) println(bool1) println(bool2) println(bool3) println(bool4) println(bool5) println(bool6) }
Вывод приведенного выше кода:
Чтобы понять приведенный выше код, просто поместите его в свой мозг:
- && возвращает true, если оба операнда true, иначе false
- || возвращает true, если любой из операндов true (означает, что любой из них true), в противном случае ложь
- ! возвращает true, если операнд false, и наоборот. Это также отрицает выражение. Если выражение оценивается как false, оно возвращает true при применении оператора not и наоборот.
Пример 2
fun main(){ val x = true val y = false val z = true println(x.and(y)) println(y.or(z)) println(z.not()) }
В приведенном выше коде показано использование функций и(), или() и не().
Унарные операторы
Это специальные операторы, для работы которых требуется только один операнд.
- унарный плюс (+)
- унарный минус (-)
- ++ → увеличить на 1 (можно до или после)
- -- → уменьшить на 1 (можно до или после)
- унарная инверсия (!)→ инвертирует логическое значение
fun main(){ var x = +3 //unary plus val y = -3 //unary minus val z = true println(x) println(y) println(!z) //unary inversion val a = x++ //post increment val b = ++x //pre increment val c = x-- //post decrement val d = --x //pre decrement println(a) println(b) println(c) println(d) }
Позвольте мне объяснить вам построчно… Обратите внимание🔥
var x = +3 //унарный плюс
Здесь мы знаем, что просто написать 3 было бы нормально. Но унарный оператор плюс также используется для явного указания, что 3 на самом деле является положительной 3.
val y = -3 //унарный минус
Просто, просто введите значение как отрицательное 3, используя унарный оператор минус.
знач z = правда
Объявил логическую переменную z и установил для нее значение true.
println(x)
Напечатано значение, хранящееся внутри x, равное 3.
println(г)
Напечатано значение, хранящееся внутри y, равное -3.
println(!z) //унарная инверсия
Напечатал инвертированное значение z с помощью унарного оператора инверсии, в нашем случае это false (изначально установлено true). сильный>).
val a = x++ //приращение записи
Оператор приращения помещается после переменной x, что означает, что это оператор после приращения. В этом случае значение x сохраняется в a, а затем x Значение увеличивается на 1. Значение x изначально было равно 3 и хранилось в a. Итак, a = 3. Теперь x увеличивается на 1, т. е. x = 4.
val b = ++x //предварительное увеличение
Оператор приращения помещается перед переменной x, что означает, что это оператор перед приращением. В этом случае сначала значение x увеличивается на 1, а новое значение x равно хранится в b. Значение x раньше было 4, а теперь оно увеличивается на 1. Таким образом, x = 5. Теперь , это новое значение x, т. е. 5, сохраняется в b. Итак, b = 5.
val c = x-- //уменьшение значения
Оператор декремента помещается после переменной x, что означает, что это оператор постдекремента. В этом случае значение x сохраняется в c, а затем x Значение уменьшается на 1. Значение x сохраняется в c, а затем значение x уменьшается на 1. Значение xранее было равно 5 и было хранится в c. Итак, c = 5. Теперь x уменьшается на 1, т. е. x = 4.
val d = --x //предварительное уменьшение
Оператор декремента помещается перед переменной x, что означает, что это оператор предварительного декремента. В этом случае сначала значение x уменьшается на 1, а новое значение x равно хранится в d. Значение x раньше было равно 4, а теперь оно уменьшено на 1. Таким образом, x = 3. Теперь , это новое значение x, т. е. 3, сохраняется в d. Итак, d= 3.
В целом значения a, b, c и d равны 3, 5, 5 и 3 соответственно. Теперь проверьте это в выводе приведенного выше кода:
Игнорируйте первые два оператора печати, которые очевидны🙄. Теперь мы видим 3, 5, 5 и 3. Последний оператор вывода привел к false из-за операции унарной инверсии над переменной z.
Ура!… Мы все поняли. Но ждать! Я пропустил еще один тип оператора в Котлине?😢
Побитовые операторы
Прежде чем понимать побитовые операторы, вы должны знать следующее:
- Двоичная система счисления
- Преобразование числа в десятичной системе в соответствующий двоичный эквивалент
- Преобразование двоичного числа в соответствующий десятичный эквивалент
Двоичная система счисления
В десятичной системе счисления есть 10 чисел, а именно 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Но в двоичной системе счисления мы имеем дело с двумя числами, 0 и 1. Вот почему мы говорим, что десятичная система счисления — это система с основанием 10, а двоичная система счисления — это система с основанием 2.
Компьютеры не понимают буквы, символы и т. д. Они преобразуют все в последовательность 0 и 1, чтобы хранить данные любого типа. Это причина работы с двоичными числами в информатике.
Преобразование числа в десятичной системе в соответствующий двоичный эквивалент
Допустим, вы хотите преобразовать 45 в соответствующий двоичный эквивалент.
Что вы делаете, так это делите 45 на 2 последовательно. Каждый раз, когда вы делите, просто игнорируйте остатки и записывайте числа, которые вы получаете на каждом последующем шаге, справа налево, начиная с 45. Это выглядит так:
Я получаю последовательность чисел 45, 22, 11, 5, 2 и 1. Следующий шаг — поставить 1 под нечетными числами и 0 под четные числа. Соберите все цифры и объедините их так, чтобы получилось 101101, написанное слева.
ПРИМЕЧАНИЕ:- Вы расположили его справа после последовательного деления, но, наконец, объединили слева.
Таким образом, 45 в десятичной системе → 101101 в двоичной системе.
Преобразование двоичного числа в соответствующий десятичный эквивалент
А теперь поступим наоборот. Допустим, я беру двоичное число 101101.
Каждая цифра в двоичном числе расположена в местах (также называемых весами) степеней двойки следующим образом:
Я написал степени 2 as- 1, 2, 4, 8, 16, 32 справа. Затем я помещаю двоичное число, то есть 101101, под ним. Теперь я сложил все числа, в которых соответствующее двоичное значение равно 1. И, наконец, я получил десятичный эквивалент 45.
Итак, 101101 в двоичном формате → 45 в десятичном.
Теперь, когда мы поняли все эти три вещи, касающиеся двоичных чисел, мы готовы понять побитовые операторы.
ПРИМЕЧАНИЕ.Всегда делайте двоичное число 8-битным, добавляя сначала нули.
В двоичном числе каждая цифра называется битом. Итак, мы собираемся выполнить вычисления относительно этих битов, используя вспомогательные функции Kotlin:
или (побитовое ИЛИ)
Он сравнивает соответствующие биты двух значений двух отдельных переменных. Если любой из битов равен 1, он дает 1. Если нет, то выдается 0.
Вот код-
fun main(){ val a = 10 val b = 20 val bitwiseOr = a or b print(bitwiseOr) }
И a, и b преобразуются в двоичную форму. Затем их соответствующие биты сравниваются, как показано ниже:
и (побитовое И)
Он сравнивает соответствующие биты двух значений двух отдельных переменных. Если оба бита равны 1, это дает 1. Если любой из битов равен 0, он дает 0.
Вот код-
fun main(){ val a = 10 val b = 25 val bitwiseAnd = a and b print(bitwiseAnd) }
xor (побитовое исключающее ИЛИ)
Он сравнивает соответствующие биты двух значений двух отдельных переменных. Если оба бита совпадают, это дает 0, а если оба бита разные, это дает 1.
Вот код-
fun main(){ val a = 10 val b = 25 val bitwiseXor = a xor b print(bitwiseXor) }
inv() (функция побитовой инверсии)
Он преобразует битовую комбинацию любого числа в противоположную. Это означает, что он инвертирует битовый шаблон. Другими словами, он преобразует 0 в 1 и 1 в 0 в определенном битовом шаблоне.
Вот код-
fun main(){ val a = 20 val bitwiseInverse = a.inv() print(bitwiseInverse) }
После применения побитовой обратной функции к 20 (эквивалентно 00010100 в двоичном формате), мы получим 11101011 в качестве двоичного, что равно 235 в десятичном эквиваленте. Но на выходе ясно видно, что это -21. Странно… Почему?
Это произошло из-за концепции под названием дополнение до 2. Вы просто заменяете 11101011 отрицательным дополнением до 2 числа 11101011.
Чтобы найти дополнение до двойки двоичного числа: начните справа, запишите все биты как есть, пока не получите первую 1. Как только вы достигли 1, после этого просто инвертируйте каждый бит.
Например, допустим, мне нужно найти дополнение 2 до 10100. Итак, начиная справа, мы пишем как 0, 0, 1. Мы достигли первой 1. Теперь инвертируем все остальные биты. Итак, получается 1, 0. Итак, ответ будет слева направо- 01100.
Итак, теперь давайте возьмем исходный случай — 11101011 (это то, что мы получили ранее после применения функции inv()).
Теперь, начиная справа, мы получаем 1 напрямую. Итак, мы достигли первой 1. Теперь давайте инвертируем каждый последующий бит — 0, 1, 0, 1, 0, 0, 0. Наконец, получается — 00010101. Десятичный эквивалент этого двоичного числа равен 21. Затем поместите отрицательное знак к нему (по определению дополнения до 2). Таким образом, это становится -21, что является нашим выходом на рисунке выше.
ПРИМЕЧАНИЕ:- Мы хорошо знакомы с арифметическими расчетами чисел в десятичной системе. Но мой вам совет: вы должны узнать об арифметических операциях, возможных с двоичными числами.
shl (побитовый сдвиг влево)
Он сдвигает битовый шаблон влево на определенное количество заданных битов, а пробелы, которые создаются справа, заполняются нулями.
Вот код-
fun main(){ val a = 20 val bitwiseShiftLeft = a shl 3 print(bitwiseShiftLeft) }
Обратите внимание, что пробелы, созданные справа при смещении битовой комбинации влево, заполнены нулями. В приведенном выше коде я передал shl 3, что означает сдвиг битовой комбинации на 3 позиции влево.
Если передается shl 0, шаблон остается таким, какой он есть, и в выводе отображается десятичный эквивалент.
шр (побитовый сдвиг вправо)
Он сдвигает битовый шаблон вправо на определенное количество заданных битов. Битовый шаблон нарезается справа в соответствии с указанными битами, а промежутки, которые создаются слева, заполняются нулями.
Если передается shr 0, шаблон остается таким, какой он есть, а десятичный эквивалент отражается в выводе.
Вот код-
fun main(){ val a = 20 val bitwiseShiftRight = a shr 3 print(bitwiseShiftRight) }
Не надо объяснять, вы все правильно поняли!
Ладно, это слишком. Давайте закончим это здесь.😒
→ Продолжить путешествие к Часть 7
Спасибо, что прочитали…
✍️Аджит Кумар Саху